X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=initial-wx2.8-mods.diff;fp=initial-wx2.8-mods.diff;h=584d87445e9e2f1e52c74667fa7bd15824a1c814;hb=f7ee98f7d964ed361068179f0e7ea4475ed1abdf;hp=0000000000000000000000000000000000000000;hpb=37d0a9642338bd25e4185f8c96fbef445d6988ff;p=ctsim.git diff --git a/initial-wx2.8-mods.diff b/initial-wx2.8-mods.diff new file mode 100644 index 0000000..584d874 --- /dev/null +++ b/initial-wx2.8-mods.diff @@ -0,0 +1,4294 @@ +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/libctgraphics/sgp.cpp ctsim-wx2.8/libctgraphics/sgp.cpp +--- ctsim/libctgraphics/sgp.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/libctgraphics/sgp.cpp 2008-07-21 10:08:10.840312064 -0600 +@@ -570,9 +570,8 @@ + { + #if HAVE_WXWINDOWS + if (m_driver.isWX()) { +- wxString sText (szText); + wxCoord deviceW, deviceH; +- m_driver.idWX()->GetTextExtent (sText, &deviceW, &deviceH); ++ m_driver.idWX()->GetTextExtent (wxConvCurrent->cMB2WC(szText), &deviceW, &deviceH); + if (m_dTextAngle == 90 || m_dTextAngle == -90) { + wxCoord temp = deviceW; + deviceW = deviceH; +@@ -722,8 +721,7 @@ + #endif + #if HAVE_WXWINDOWS + if (m_driver.isWX()) { +- wxString str (pszMessage); +- m_driver.idWX()->DrawRotatedText (str, m_iCurrentPhysicalX, m_iCurrentPhysicalY, m_dTextAngle); ++ m_driver.idWX()->DrawRotatedText (wxConvCurrent->cMB2WC(pszMessage), m_iCurrentPhysicalX, m_iCurrentPhysicalY, m_dTextAngle); + } + #endif + } +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/libctsupport/syserror.cpp ctsim-wx2.8/libctsupport/syserror.cpp +--- ctsim/libctsupport/syserror.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/libctsupport/syserror.cpp 2008-07-21 10:08:10.852312800 -0600 +@@ -57,15 +57,15 @@ + if (g_bRunningWXWindows) { + if (theApp) { + wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); +- wxString msg (strOutput.c_str()); ++ wxString msg (wxConvCurrent->cMB2WX(strOutput.c_str())); + if (msg.length() > 0) { +- msg += "\n"; ++ msg += wxChar('\n'); + eventLog.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event, thread safe + } + } else { + wxMutexGuiEnter(); +- wxLog::OnLog (wxLOG_Message, strOutput.c_str(), time(NULL)); ++ wxLog::OnLog (wxLOG_Message, wxConvCurrent->cMB2WX(strOutput.c_str()), time(NULL)); + wxMutexGuiLeave(); + } + } +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/backgroundmgr.cpp ctsim-wx2.8/src/backgroundmgr.cpp +--- ctsim/src/backgroundmgr.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/backgroundmgr.cpp 2008-07-21 10:08:10.864313536 -0600 +@@ -108,7 +108,7 @@ + BackgroundManager::OnAddTask (wxCommandEvent& event) + { + int iNumUnits = event.GetInt(); +- const char* const pszTaskName = event.GetString().c_str(); ++ const char* const pszTaskName = event.GetString().mb_str(wxConvUTF8); + BackgroundSupervisor* pSupervisor = reinterpret_cast(event.GetClientData()); + if (pSupervisor == NULL) { + sys_error (ERR_SEVERE, "Received NULL supervisor [BackgroundManager::OnAddTask]"); +@@ -139,7 +139,7 @@ + wxPoint posLabel (m_sizeBorder.x + m_sizeGauge.x, m_sizeBorder.y + iFirstUnusedPos * m_sizeCell.y); + wxPoint posButton (m_sizeBorder.x + m_sizeGauge.x + m_sizeLabel.x, m_sizeBorder.y + iFirstUnusedPos * m_sizeCell.y); + wxGauge* pGauge = new wxGauge (m_pCanvas, -1, iNumUnits, posGauge, m_sizeGauge); +- wxStaticText* pLabel = new wxStaticText (m_pCanvas, -1, pszTaskName, posLabel, m_sizeLabel); ++ wxStaticText* pLabel = new wxStaticText (m_pCanvas, -1, wxConvUTF8.cMB2WX(pszTaskName), posLabel, m_sizeLabel); + wxButton* pButton = new wxButton (m_pCanvas, s_iNextButtonID, _T("Cancel"), posButton, m_sizeButton, wxBU_LEFT); + + BackgroundManagerTask* pTask = new BackgroundManagerTask (pSupervisor, pszTaskName, +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/backgroundsupr.cpp ctsim-wx2.8/src/backgroundsupr.cpp +--- ctsim/src/backgroundsupr.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/backgroundsupr.cpp 2008-07-29 20:10:53.735726313 -0600 +@@ -57,7 +57,7 @@ + + + +-BackgroundSupervisor::BackgroundSupervisor (SupervisorThread* pMyThread, wxWindow* pParentFrame, BackgroundProcessingDocument* pDocument, const char* const pszProcessTitle, int iTotalUnits) ++BackgroundSupervisor::BackgroundSupervisor (SupervisorThread* pMyThread, wxWindow* pParentFrame, BackgroundProcessingDocument* pDocument, wxChar const* pszProcessTitle, int iTotalUnits) + : wxEvtHandler(), m_pMyThread(pMyThread), m_pParentFrame(pParentFrame), m_pDocument(pDocument), m_strProcessTitle(pszProcessTitle), + m_iTotalUnits(iTotalUnits), m_iNumThreads(0), m_bDone(false), m_bFail(false), m_bCancelled(false), m_iRunning(0), + m_pTimer(NULL), m_bWorkersDeleted(false), m_bBackgroundManagerAdded(false) +@@ -120,12 +120,12 @@ + m_vecpThreads[iThread] = createWorker (iThread, iStartUnit, iNumUnits); + if (! m_vecpThreads[iThread]) { + m_bFail = true; +- m_strFailMessage = "createWorker returned NULL [BackgroundSupervisor]"; ++ m_strFailMessage = _T("createWorker returned NULL [BackgroundSupervisor]"); + break; + } + if (m_vecpThreads[iThread]->Create () != wxTHREAD_NO_ERROR) { + m_bFail = true; +- m_strFailMessage = "Thread creation failed [BackgroundSupervisor]"; ++ m_strFailMessage = _T("Thread creation failed [BackgroundSupervisor]"); + break; + } + m_vecpThreads[iThread]->SetPriority (40); +@@ -136,13 +136,13 @@ + + m_pTimer = new Timer; + +- std::string strLabel (m_strProcessTitle); +- strLabel += " "; +- strLabel += m_pParentFrame->GetTitle(); ++ wxString strLabel (m_strProcessTitle); ++ strLabel += _T(" "); ++ strLabel += dynamic_cast(m_pParentFrame)->GetTitle(); + + #ifdef USE_BKGMGR + wxCommandEvent addTaskEvent (wxEVT_COMMAND_MENU_SELECTED, MSG_BACKGROUND_SUPERVISOR_ADD); +- addTaskEvent.SetString (strLabel.c_str()); ++ addTaskEvent.SetString (strLabel); + addTaskEvent.SetInt (m_iTotalUnits); + addTaskEvent.SetClientData (this); + wxPostEvent (theApp->getBackgroundManager(), addTaskEvent); +@@ -192,7 +192,7 @@ + #ifdef DEBUG + if (theApp->getVerboseLogging()) { + wxString msg; +- msg.Printf("Background Supervisor: Thread finished. Remaining threads: %d\n", m_iRunning); ++ msg.Printf(_T("Background Supervisor: Thread finished. Remaining threads: %d\n"), m_iRunning); + wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); + eventLog.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event +@@ -203,11 +203,11 @@ + } + + void +-BackgroundSupervisor::onWorkerFail (int iThread, std::string strFailMessage) ++BackgroundSupervisor::onWorkerFail (int iThread, const wxString& strFailMessage) + { + m_iRunning--; + wxCommandEvent eventLog( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); +- eventLog.SetString( strFailMessage.c_str() ); ++ eventLog.SetString( strFailMessage ); + wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event + + onCancel(); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/backgroundsupr.h ctsim-wx2.8/src/backgroundsupr.h +--- ctsim/src/backgroundsupr.h 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/backgroundsupr.h 2008-07-29 20:09:41.539253901 -0600 +@@ -57,13 +57,13 @@ + SupervisorThread* m_pMyThread; + wxWindow* m_pParentFrame; + BackgroundProcessingDocument* m_pDocument; +- const std::string m_strProcessTitle; ++ const wxString m_strProcessTitle; + + const unsigned int m_iTotalUnits; + int m_iNumThreads; + volatile bool m_bDone; + volatile bool m_bFail; +- std::string m_strFailMessage; ++ wxString m_strFailMessage; + volatile bool m_bCancelled; + volatile int m_iRunning; + volatile unsigned int m_iUnitsDone; +@@ -88,7 +88,7 @@ + MSG_WORKER_THREAD_FAIL = 7507, // sent by workers when they fail + }; + +- BackgroundSupervisor (SupervisorThread* pMyThread, wxWindow* pParentFrame, BackgroundProcessingDocument* pDocument, const char* const pszProcessTitle, ++ BackgroundSupervisor (SupervisorThread* pMyThread, wxWindow* pParentFrame, BackgroundProcessingDocument* pDocument, wxChar const* pszProcessTitle, + int iTotalUnits); + + BackgroundSupervisor () +@@ -105,7 +105,7 @@ + + virtual void onCancel(); + +- virtual void onWorkerFail(int iThread, std::string strFailMessage); ++ virtual void onWorkerFail(int iThread, const wxString& strFailMessage); + virtual void onWorkerUnitTick(); + virtual void onWorkerDone(int iThread); + +@@ -116,7 +116,7 @@ + bool isDone() const {return m_bDone;} + void setDone() { m_bDone = true; } + bool fail() const {return m_bFail;} +- const std::string& getFailMessage() const { return m_strFailMessage; } ++ const wxString& getFailMessage() const { return m_strFailMessage; } + bool cancelled() const {return m_bCancelled;} + + int getNumWorkers() const { return m_iNumThreads; } +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/ctsim.cpp ctsim-wx2.8/src/ctsim.cpp +--- ctsim/src/ctsim.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/ctsim.cpp 2008-07-28 17:18:08.431794408 -0600 +@@ -82,7 +82,8 @@ + IMPLEMENT_APP(CTSimApp) + + CTSimApp::CTSimApp() +-: m_bAdvancedOptions(false), m_bSetModifyNewDocs(true), m_bVerboseLogging(false), m_bShowStartupTips(true), ++: m_bAdvancedOptions(false), m_bSetModifyNewDocs(true), ++ m_bVerboseLogging(false), m_bShowStartupTips(true), + m_iCurrentTip(0), m_bUseBackgroundTasks(false), + m_docManager(NULL), m_pFrame(NULL), m_pConfig(0), m_pLog(0), m_pLogDoc(0) + { +@@ -100,6 +101,8 @@ + bool + CTSimApp::OnInit() + { ++ wxApp::OnInit(); ++ + #ifdef HAVE_SETPRIORITY + setpriority (PRIO_PROCESS, 0, 15); // set to low scheduling priority + #endif +@@ -113,7 +116,18 @@ + #ifdef __WXMAC__ + int c = -1; + #else +- int c = getopt_long (argc, argv, "", ctsimOptions, NULL); ++ char** cargv = new char* [argc]; ++ for (int i = 0; i < argc; i++) { ++ const char* p = wxConvUTF8.cWX2MB(argv[i]); ++ cargv[i] = new char [strlen(p)+1]; ++ strcpy(cargv[i], p); ++ } ++ int c = getopt_long (argc, cargv, "", ctsimOptions, NULL); ++ for (int i = 0; i < argc; i++) { ++ delete cargv[i]; ++ } ++ delete cargv; ++ + #endif + if (c == -1) + break; +@@ -129,26 +143,28 @@ + exit(0); + case O_HELP: + case '?': +- usage (argv[0]); ++ usage (wxConvCurrent->cWX2MB(argv[0])); + exit (0); + case O_PRINT: + bPrintFiles = true; + break; + default: +- usage (argv[0]); ++ usage (wxConvCurrent->cWX2MB(argv[0])); + exit (1); + } + } + + m_docManager = new wxDocManager (wxDEFAULT_DOCMAN_FLAGS, true); + +- m_pDocTemplImage = new wxDocTemplate (m_docManager, "ImageFile", "*.if", "", "if", "ImageFile", "ImageView", CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView)); +- m_pDocTemplProjection = new wxDocTemplate (m_docManager, "ProjectionFile", "*.pj", "", "pj", "ProjectionFile", "ProjectionView", CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView)); +- m_pDocTemplPhantom = new wxDocTemplate (m_docManager, "PhantomFile", "*.phm", "", "phm", "PhantomFile", "PhantomView", CLASSINFO(PhantomFileDocument), CLASSINFO(PhantomFileView)); +- m_pDocTemplPlot = new wxDocTemplate (m_docManager, "PlotFile", "*.plt", "", "plt", "PlotFile", "PlotView", CLASSINFO(PlotFileDocument), CLASSINFO(PlotFileView)); +- m_pDocTemplText = new wxDocTemplate (m_docManager, "TextFile", "*.txt", "", "txt", "TextFile", "TextView", CLASSINFO(TextFileDocument), CLASSINFO(TextFileView), wxTEMPLATE_INVISIBLE); ++ m_pDocTemplImage = new wxDocTemplate (m_docManager, _T("ImageFile"), _T("*.if"), _T(""), _T("if"), _T("ImageFile"), _T("ImageView"), CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView)); ++ m_pDocTemplProjection = new wxDocTemplate (m_docManager, _T("ProjectionFile"), _T("*.pj"), _T(""), _T("pj"), _T("ProjectionFile"), _T("ProjectionView"), CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView)); ++ m_pDocTemplPhantom = new wxDocTemplate (m_docManager, _T("PhantomFile"), _T("*.phm"), _T(""), _T("phm"), _T("PhantomFile"), _T("PhantomView"), CLASSINFO(PhantomFileDocument), CLASSINFO(PhantomFileView)); ++ m_pDocTemplPlot = new wxDocTemplate (m_docManager, _T("PlotFile"), _T("*.plt"), _T(""), _T("plt"), _T("PlotFile"), _T("PlotView"), CLASSINFO(PlotFileDocument), CLASSINFO(PlotFileView)); ++ m_pDocTemplText = new wxDocTemplate (m_docManager, _T("TextFile"), _T("*.txt"), _T(""), _T("txt"), _T("TextFile"), _T("TextView"), CLASSINFO(TextFileDocument), CLASSINFO(TextFileView), wxTEMPLATE_INVISIBLE); + #if wxUSE_GLCANVAS +- m_pDocTemplGraph3d = new wxDocTemplate (m_docManager, "Graph3dFile", "*.g3d", "", "g3d", "Graph3dFile", "Graph3dView", CLASSINFO(Graph3dFileDocument), CLASSINFO(Graph3dFileView), wxTEMPLATE_INVISIBLE); ++ m_pDocTemplGraph3d = new wxDocTemplate (m_docManager, _T("Graph3dFile"), _T("*.g3d"), _T(""), _T("g3d"), ++ _T("Graph3dFile"), _T("Graph3dView"), CLASSINFO(Graph3dFileDocument), ++ CLASSINFO(Graph3dFileView), wxTEMPLATE_INVISIBLE); + #endif + + #if wxUSE_GIF +@@ -163,7 +179,7 @@ + int xDisplay, yDisplay; + ::wxDisplaySize (&xDisplay, &yDisplay); + +- m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, "CTSim", wxPoint(0, 0), ++ m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, _T("CTSim"), wxPoint(0, 0), + #ifdef CTSIM_MDI + wxSize(nearest(xDisplay * .75), nearest(yDisplay * .75)), + #else +@@ -193,29 +209,29 @@ + m_pLogDoc->getView()->getFrame()->Show (true); + } else + #else +- m_pLog = new wxTextCtrl (m_pFrame, -1, "Log Window\n", wxPoint(0, 0), wxSize(0,0), wxTE_MULTILINE | wxTE_READONLY); ++ m_pLog = new wxTextCtrl (m_pFrame, -1, _T("Log Window\n"), wxPoint(0, 0), wxSize(0,0), wxTE_MULTILINE | wxTE_READONLY); + #endif + wxLog::SetActiveTarget (new wxLogTextCtrl(m_pLog)); + + wxString helpDir; +- if (! m_pConfig->Read("HelpDir", &helpDir)) ++ if (! m_pConfig->Read(_T("HelpDir"), &helpDir)) + helpDir = ::wxGetCwd(); + #ifdef CTSIM_WINHELP +- if (! m_pFrame->getWinHelpController().Initialize(helpDir + "/ctsim")) +- *m_pLog << "Cannot initialize the Windows Help system" << "\n"; ++ if (! m_pFrame->getWinHelpController().Initialize(helpDir + _T("/ctsim"))) ++ *m_pLog << _T("Cannot initialize the Windows Help system") << _T("\n"); + #else + #ifdef DATADIR +- wxString docDir (DATADIR); ++ wxString docDir (DATADIR, *wxConvCurrent); + #else + wxString docDir (::wxGetCwd()); + #endif +- wxString docFile = docDir + "ctsim.htb"; ++ wxString docFile = docDir + _T("ctsim.htb"); + if (! m_pFrame->getHtmlHelpController().AddBook(docFile) && +- ! m_pFrame->getHtmlHelpController().AddBook("/usr/share/ctsim/ctsim.htb") && +- ! m_pFrame->getHtmlHelpController().AddBook("/tmp/ctsim.htb")) +- *m_pLog << "Cannot initialize the HTML Help system" << "\n"; ++ ! m_pFrame->getHtmlHelpController().AddBook(_T("/usr/share/ctsim/ctsim.htb")) && ++ ! m_pFrame->getHtmlHelpController().AddBook(_T("/tmp/ctsim.htb"))) ++ *m_pLog << _T("Cannot initialize the HTML Help system") << _T("\n"); + else { +- if (::wxDirExists ("/tmp")) ++ if (::wxDirExists (_T("/tmp"))) + m_pFrame->getHtmlHelpController().SetTempDir(_T("/tmp")); + m_pFrame->getHtmlHelpController().UseConfig (m_pConfig); + } +@@ -297,40 +313,40 @@ + CTSimApp::openConfig() + { + #ifdef MSVC +- m_pConfig = new wxConfig("ctsim", "Kevin Rosenberg", "", "", wxCONFIG_USE_LOCAL_FILE); ++ m_pConfig = new wxConfig(_T("ctsim"), _T("Kevin Rosenberg"), _T(""), _T(""), wxCONFIG_USE_LOCAL_FILE); + #else +- m_pConfig = new wxConfig("ctsim", "Kevin Rosenberg", ".ctsim", "", wxCONFIG_USE_LOCAL_FILE); ++ m_pConfig = new wxConfig(_T("ctsim"), _T("Kevin Rosenberg"), _T(".ctsim"), _T(""), wxCONFIG_USE_LOCAL_FILE); + #endif + + wxConfigBase::Set(m_pConfig); +- m_pConfig->Read ("AdvancedOptions", &m_bAdvancedOptions); +- m_pConfig->Read ("SetModifyNewDocs", &m_bSetModifyNewDocs); +- m_pConfig->Read ("VerboseLogging", &m_bVerboseLogging); +- m_pConfig->Read ("StartupTips", &m_bShowStartupTips); +- m_pConfig->Read ("CurrentTip", &m_iCurrentTip); +- m_pConfig->Read ("UseBackgroundTasks", &m_bUseBackgroundTasks); ++ m_pConfig->Read (_T("AdvancedOptions"), &m_bAdvancedOptions); ++ m_pConfig->Read (_T("SetModifyNewDocs"), &m_bSetModifyNewDocs); ++ m_pConfig->Read (_T("VerboseLogging"), &m_bVerboseLogging); ++ m_pConfig->Read (_T("StartupTips"), &m_bShowStartupTips); ++ m_pConfig->Read (_T("CurrentTip"), &m_iCurrentTip); ++ m_pConfig->Read (_T("UseBackgroundTasks"), &m_bUseBackgroundTasks); + #ifdef HAVE_FFTW + wxString strFftwWisdom; +- m_pConfig->Read ("FftwWisdom", strFftwWisdom); ++ m_pConfig->Read (_T("FftwWisdom"), strFftwWisdom); + if (strFftwWisdom.size() > 0) +- fftw_import_wisdom_from_string (strFftwWisdom.c_str()); ++ fftw_import_wisdom_from_string (strFftwWisdom.mb_str(wxConvUTF8)); + #endif + } + + void + CTSimApp::closeConfig() + { +- m_pConfig->Write ("AdvancedOptions", m_bAdvancedOptions); +- m_pConfig->Write ("SetModifyNewDocs", m_bSetModifyNewDocs); +- m_pConfig->Write ("VerboseLogging", m_bVerboseLogging); +- m_pConfig->Write ("StartupTips", m_bShowStartupTips); +- m_pConfig->Write ("CurrentTip", m_iCurrentTip); +- m_pConfig->Write ("UseBackgroundTasks", m_bUseBackgroundTasks); ++ m_pConfig->Write (_T("AdvancedOptions"), m_bAdvancedOptions); ++ m_pConfig->Write (_T("SetModifyNewDocs"), m_bSetModifyNewDocs); ++ m_pConfig->Write (_T("VerboseLogging"), m_bVerboseLogging); ++ m_pConfig->Write (_T("StartupTips"), m_bShowStartupTips); ++ m_pConfig->Write (_T("CurrentTip"), m_iCurrentTip); ++ m_pConfig->Write (_T("UseBackgroundTasks"), m_bUseBackgroundTasks); + #ifdef HAVE_FFTW + const char* const pszWisdom = fftw_export_wisdom_to_string(); +- wxString strFftwWisdom (pszWisdom); ++ wxString strFftwWisdom (pszWisdom, *wxConvCurrent); + fftw_free ((void*) pszWisdom); +- m_pConfig->Write ("FftwWisdom", strFftwWisdom); ++ m_pConfig->Write (_T("FftwWisdom"), strFftwWisdom); + #endif + + delete m_pConfig; +@@ -342,7 +358,7 @@ + { + static int untitledNumber = 1; + +- wxString filename ("Untitled"); ++ wxString filename (_T("Untitled")); + filename << untitledNumber++; + + return (filename); +@@ -421,7 +437,7 @@ + : wxDocMDIParentFrame(manager, NULL, id, title, pos, size, type, "MainFrame") + #else + MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type) +-: wxDocParentFrame(manager, frame, id, title, pos, size, type, "MainFrame") ++: wxDocParentFrame(manager, frame, id, title, pos, size, type, _T("MainFrame")) + #endif + { + m_bShuttingDown = false; +@@ -429,14 +445,14 @@ + //// Make a menubar + wxMenu *file_menu = new wxMenu; + +- file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P"); +- file_menu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F"); +- file_menu->Append(wxID_OPEN, "&Open...\tCtrl-O"); ++ file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P")); ++ file_menu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F")); ++ file_menu->Append(wxID_OPEN, _T("&Open...\tCtrl-O")); + + file_menu->AppendSeparator(); +- file_menu->Append (MAINMENU_IMPORT, "&Import...\tCtrl-M"); +- file_menu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces..."); +- file_menu->Append(MAINMENU_FILE_EXIT, "E&xit"); ++ file_menu->Append (MAINMENU_IMPORT, _T("&Import...\tCtrl-M")); ++ file_menu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces...")); ++ file_menu->Append(MAINMENU_FILE_EXIT, _T("E&xit")); + + // history of files visited + theApp->getDocManager()->FileHistoryAddFilesToMenu(file_menu); +@@ -448,21 +464,21 @@ + #endif + + wxMenu* help_menu = new wxMenu; +- help_menu->Append (MAINMENU_HELP_CONTENTS, "&Contents\tF1"); +- help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); +- help_menu->Append (IDH_QUICKSTART, "&Quick Start"); ++ help_menu->Append (MAINMENU_HELP_CONTENTS, _T("&Contents\tF1")); ++ help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips")); ++ help_menu->Append (IDH_QUICKSTART, _T("&Quick Start")); + #if defined(CTSIM_WINHELP) && (defined(DEBUG) || defined(_DEBUG)) +- help_menu->Append (MAINMENU_HELP_SECONDARY, "&Secondary Help"); ++ help_menu->Append (MAINMENU_HELP_SECONDARY, _T("&Secondary Help")); + #endif +- help_menu->Append (MAINMENU_HELP_ABOUT, "&About"); ++ help_menu->Append (MAINMENU_HELP_ABOUT, _T("&About")); + + wxMenuBar* menu_bar = new wxMenuBar; + +- menu_bar->Append(file_menu, "&File"); ++ menu_bar->Append(file_menu, _T("&File")); + #ifndef CTSIM_MDI +- menu_bar->Append(m_pWindowMenu, "&Window"); ++ menu_bar->Append(m_pWindowMenu, _T("&Window")); + #endif +- menu_bar->Append(help_menu, "&Help"); ++ menu_bar->Append(help_menu, _T("&Help")); + + SetMenuBar(menu_bar); + +@@ -470,7 +486,7 @@ + #ifndef CTSIM_MDI + int i; + for (i = 0; i < MAX_WINDOW_MENUITEMS; i++) { +- m_apWindowMenuItems[i] = new wxMenuItem (m_pWindowMenu, MAINMENU_WINDOW_BASE+i, wxString("[EMPTY]")); ++ m_apWindowMenuItems[i] = new wxMenuItem (m_pWindowMenu, MAINMENU_WINDOW_BASE+i, _T("[EMPTY]")); + m_pWindowMenu->Append (m_apWindowMenuItems[i]); + m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+i, false); + } +@@ -552,11 +568,11 @@ + DialogGetPhantom dialogPhantom (this, m_iDefaultPhantomID); + int dialogReturn = dialogPhantom.ShowModal(); + if (dialogReturn == wxID_OK) { +- wxString selection (dialogPhantom.getPhantom()); ++ wxString selection (dialogPhantom.getPhantom(), *wxConvCurrent); + if (theApp->getVerboseLogging()) +- *theApp->getLog() << "Selected phantom " << selection.c_str() << "\n"; +- wxString filename = selection + ".phm"; +- m_iDefaultPhantomID = Phantom::convertNameToPhantomID (selection.c_str()); ++ *theApp->getLog() << _T("Selected phantom ") << selection.c_str() << _T("\n"); ++ wxString filename = selection + _T(".phm"); ++ m_iDefaultPhantomID = Phantom::convertNameToPhantomID (selection.mb_str(wxConvUTF8)); + theApp->getDocManager()->CreateDocument (filename, wxDOC_SILENT); + } + +@@ -568,23 +584,26 @@ + DialogGetFilterParameters dialogFilter (this, m_iDefaultFilterXSize, m_iDefaultFilterYSize, m_iDefaultFilterID, m_dDefaultFilterParam, m_dDefaultFilterBandwidth, m_iDefaultFilterDomainID, m_dDefaultFilterInputScale, m_dDefaultFilterOutputScale); + int dialogReturn = dialogFilter.ShowModal(); + if (dialogReturn == wxID_OK) { +- wxString strFilter (dialogFilter.getFilterName()); +- wxString strDomain (dialogFilter.getDomainName()); +- m_iDefaultFilterID = SignalFilter::convertFilterNameToID (strFilter.c_str()); +- m_iDefaultFilterDomainID = SignalFilter::convertDomainNameToID (strDomain.c_str()); ++ wxString strFilter (dialogFilter.getFilterName(), *wxConvCurrent); ++ wxString strDomain (dialogFilter.getDomainName(), *wxConvCurrent); ++ m_iDefaultFilterID = SignalFilter::convertFilterNameToID (strFilter.mb_str(wxConvUTF8)); ++ m_iDefaultFilterDomainID = SignalFilter::convertDomainNameToID (strDomain.mb_str(wxConvUTF8)); + m_iDefaultFilterXSize = dialogFilter.getXSize(); + m_iDefaultFilterYSize = dialogFilter.getYSize(); + m_dDefaultFilterBandwidth = dialogFilter.getBandwidth(); + m_dDefaultFilterParam= dialogFilter.getFilterParam(); + m_dDefaultFilterInputScale = dialogFilter.getInputScale(); + m_dDefaultFilterOutputScale = dialogFilter.getOutputScale(); +- std::ostringstream os; +- os << "Generate Filter=" << strFilter.c_str() +- << ", size=(" << static_cast(m_iDefaultFilterXSize) << "," << static_cast(m_iDefaultFilterYSize) +- << "), domain=" << strDomain.c_str() << ", filterParam=" << m_dDefaultFilterParam << ", bandwidth=" << m_dDefaultFilterBandwidth +- << ", inputScale=" << m_dDefaultFilterInputScale << ", outputScale=" << m_dDefaultFilterOutputScale; +- *theApp->getLog() << os.str().c_str() << "\n"; +- wxString filename = "untitled.if"; ++ wxString os; ++ os << _T("Generate Filter=") << strFilter ++ << _T(", size=(") << static_cast(m_iDefaultFilterXSize) << _T(",") ++ << static_cast(m_iDefaultFilterYSize) ++ << _T("), domain=") << strDomain.c_str() << _T(", filterParam=") ++ << m_dDefaultFilterParam << _T(", bandwidth=") << ++ m_dDefaultFilterBandwidth ++ << _T(", inputScale=") << m_dDefaultFilterInputScale << _T(", outputScale=") << m_dDefaultFilterOutputScale; ++ *theApp->getLog() << os << _T("\n"); ++ wxString filename = _T("untitled.if"); + ImageFileDocument* pFilterDoc = theApp->newImageDoc(); + pFilterDoc->setBadFileOpen(); + if (! pFilterDoc) { +@@ -593,8 +612,8 @@ + } + ImageFile& rIF = pFilterDoc->getImageFile(); + rIF.setArraySize (m_iDefaultFilterXSize, m_iDefaultFilterYSize); +- rIF.filterResponse (strDomain.c_str(), m_dDefaultFilterBandwidth, strFilter.c_str(), m_dDefaultFilterParam, m_dDefaultFilterInputScale, m_dDefaultFilterOutputScale); +- rIF.labelAdd (os.str().c_str()); ++ rIF.filterResponse (strDomain.mb_str(wxConvUTF8), m_dDefaultFilterBandwidth, strFilter.mb_str(wxConvUTF8), m_dDefaultFilterParam, m_dDefaultFilterInputScale, m_dDefaultFilterOutputScale); ++ rIF.labelAdd (os.mb_str(wxConvUTF8)); + if (theApp->getAskDeleteNewDocs()) + pFilterDoc->Modify (true); + pFilterDoc->UpdateAllViews(); +@@ -693,7 +712,7 @@ + #ifdef CTSIM_WINHELP + m_winHelp.DisplayContents (); + #else +- m_htmlHelp.Display ("Contents"); ++ m_htmlHelp.Display (_T("Contents")); + #endif + break; + +@@ -724,7 +743,7 @@ + wxDocument* pDoc = static_cast(pNode->GetData()); + wxString strFilename = pDoc->GetFilename(); + if (iPos < 10) { +- strFilename += "\tCtrl-"; ++ strFilename += _T("\tCtrl-"); + strFilename += static_cast('0' + iPos); + } + static_cast(m_apWindowMenuItems[iPos])->SetName (strFilename); +@@ -735,7 +754,7 @@ + } + for (int i = iPos; i < MAX_WINDOW_MENUITEMS; i++) { + m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+i, false); +- static_cast(m_apWindowMenuItems[i])->SetName (wxString("[EMPTY]")); ++ static_cast(m_apWindowMenuItems[i])->SetName (_T("[EMPTY]")); + m_apWindowMenuData[i] = NULL; + } + #endif +@@ -830,7 +849,7 @@ + const wxSize& size = wxDefaultSize, + long style = wxSTATIC_BORDER, + const wxValidator& validator = wxDefaultValidator, +- const wxString& name = "BitmapCtrl"); ++ const wxString& name = _T("BitmapCtrl")); + + + virtual ~BitmapControl(); +@@ -891,14 +910,14 @@ + }; + + BitmapDialog::BitmapDialog (wxBitmap* pBitmap, char const* pszTitle) +-: wxDialog(theApp->getMainFrame(), -1, wxString(pszTitle), wxDefaultPosition, wxDefaultSize, wxDIALOG_MODAL | wxDEFAULT_DIALOG_STYLE) ++ : wxDialog(theApp->getMainFrame(), -1, wxString(pszTitle,*wxConvCurrent), wxDefaultPosition, wxDefaultSize, wxDIALOG_MODAL | wxDEFAULT_DIALOG_STYLE) + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + + pTopSizer->Add (new BitmapControl (pBitmap, this), 0, wxALIGN_CENTER | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Ok"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Ok")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); + + pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER); +@@ -916,7 +935,7 @@ + void + MainFrame::OnPreferences (wxCommandEvent& WXUNUSED(event) ) + { +- DialogPreferences dlg (this, "CTSim Preferences", theApp->getAdvancedOptions(), ++ DialogPreferences dlg (this, _T("CTSim Preferences"), theApp->getAdvancedOptions(), + theApp->getAskDeleteNewDocs(), theApp->getVerboseLogging(), theApp->getStartupTips(), + theApp->getUseBackgroundTasks()); + if (dlg.ShowModal() == wxID_OK) { +@@ -935,37 +954,43 @@ + if (dialogImport.ShowModal() != wxID_OK) + return; + +- wxString strFormatName (dialogImport.getFormatName ()); +- m_iDefaultImportFormat = ImageFile::convertImportFormatNameToID (strFormatName.c_str()); ++ wxString strFormatName (dialogImport.getFormatName (), *wxConvCurrent); ++ m_iDefaultImportFormat = ImageFile::convertImportFormatNameToID (strFormatName.mb_str(wxConvUTF8)); + + wxString strExt; + wxString strWildcard; + if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_PPM) { +- strExt = ".ppm"; +- strWildcard = "PPM Files (*.ppm)|*.ppm|PGM Files (*.pgm)|*.pgm"; ++ strExt = _T(".ppm"); ++ strWildcard = _T("PPM Files (*.ppm)|*.ppm|PGM Files (*.pgm)|*.pgm"); + } + #ifdef HAVE_PNG + else if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_PNG) { +- strExt = ".png"; +- strWildcard = "PNG Files (*.png)|*.png"; ++ strExt = _T(".png"); ++ strWildcard = _T("PNG Files (*.png)|*.png"); + } + #endif + #ifdef HAVE_CTN_DICOM + else if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_DICOM) { +- strExt = "*.*"; +- strWildcard = "Dicom Files (*.*)|*.*"; ++ strExt = _T("*.*"); ++ strWildcard = _T("Dicom Files (*.*)|*.*"); + } + #endif + else { + return; + } + +- wxString strFilename = wxFileSelector (wxString("Import Filename"), wxString(""), +- wxString(""), strExt, strWildcard, wxHIDE_READONLY | wxOPEN); ++#if WXWIN_COMPATIBILITY_2_4 ++ wxString strFilename = wxFileSelector (wxString(wxConvUTF8.cMB2WX("Import Filename")), wxString(wxConvUTF8.cMB2WX("")), ++ wxString(wxConvUTF8.cMB2WX("")), strExt, strWildcard, wxHIDE_READONLY | wxOPEN); ++#else ++ wxString strFilename = wxFileSelector (wxString(wxConvUTF8.cMB2WX("Import Filename")), wxString(wxConvUTF8.cMB2WX("")), ++ wxString(wxConvUTF8.cMB2WX("")), strExt, strWildcard, wxOPEN); ++#endif ++ + if (! strFilename.IsEmpty()) { + if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_PPM || m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_PNG) { + ImageFile* pIF = new ImageFile; +- if (pIF->importImage (strFormatName.c_str(), strFilename.c_str())) { ++ if (pIF->importImage (strFormatName.mb_str(wxConvUTF8), strFilename.mb_str(wxConvUTF8))) { + ImageFileDocument* pIFDoc = theApp->newImageDoc(); + pIFDoc->setImageFile(pIF); + pIFDoc->getView()->getFrame()->Show(true); +@@ -982,9 +1007,9 @@ + } + #ifdef HAVE_CTN_DICOM + else if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_DICOM) { +- DicomImporter dicomImport (strFilename.c_str()); ++ DicomImporter dicomImport (strFilename.mb_str(wxConvUTF8)); + if (dicomImport.fail()) { +- ::wxMessageBox (dicomImport.failMessage().c_str(), "Import Error"); ++ ::wxMessageBox (wxConvUTF8.cMB2WX(dicomImport.failMessage().c_str()), _T("Import Error")); + } else if (dicomImport.testImage()) { + ImageFileDocument* pIFDoc = theApp->newImageDoc(); + ImageFile* pIF = dicomImport.getImageFile(); +@@ -1011,7 +1036,7 @@ + pProjDoc->getView()->setInitialClientSize(); + pProjDoc->Activate(); + } else +- ::wxMessageBox ("Unrecognized DICOM file contents", "Import Error"); ++ ::wxMessageBox (_T("Unrecognized DICOM file contents"), _T("Import Error")); + } + #endif + else +@@ -1024,38 +1049,38 @@ + MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) + { + wxString strOSDesc = ::wxGetOsDescription(); +- *theApp->getLog() << "Operating System: " << strOSDesc; +- *theApp->getLog() << ", wxWindows: " << wxVERSION_STRING; +-#ifdef __TIMESTAMP__ +- *theApp->getLog() << ", Build Date: " << __TIMESTAMP__; ++ *theApp->getLog() << _T("Operating System: ") << strOSDesc; ++ *theApp->getLog() << _T(", wxWindows: ") << wxVERSION_STRING; ++#ifdef _TIMESTAMP__ ++ *theApp->getLog() << _T(", Build Date: ") << wxConvUTF8.cMB2WX(_TIMESTAMP__); + #endif + #if defined(DEBUG) +- *theApp->getLog() << ", Debug version"; ++ *theApp->getLog() << _T(", Debug version"); + #else +- *theApp->getLog() << ", Release version"; ++ *theApp->getLog() << _T(", Release version"); + #endif + #ifdef VERSION +- *theApp->getLog() << " " << VERSION; ++ *theApp->getLog() << _T(" ") << wxConvUTF8.cMB2WX(VERSION); + #elif defined(CTSIMVERSION) +- *theApp->getLog() << " " << CTSIMVERSION; ++ *theApp->getLog() << _T(" ") << _T(CTSIMVERSION); + #endif +- *theApp->getLog() << "\n"; ++ *theApp->getLog() << _T("\n"); + + wxBitmap bmp (splash); + if (bmp.Ok()) { + BitmapDialog dlg (&bmp, "About CTSim"); + dlg.ShowModal(); + } else { +- wxString msg = "CTSim\nThe Open Source Computed Tomography Simulator\n"; ++ wxString msg = _T("CTSim\nThe Open Source Computed Tomography Simulator\n"); + #ifdef VERSION +- msg << "Version: " << VERSION << "\n\n"; ++ msg << _T("Version: ") << wxConvUTF8.cMB2WX(VERSION) << _T("\n\n"); + #elif defined(CTSIMVERSION) +- msg << "Version: " << CTSIMVERSION << "\n\n"; ++ msg << _T("Version: ") << wxConvUTF8.cMB2WX(CTSIMVERSION) << _T("\n\n"); + #endif +- msg += "Author: Kevin Rosenberg \nUsage: ctsim [files-to-open..] [--help]"; ++ msg += _T("Author: Kevin Rosenberg \nUsage: ctsim [files-to-open..] [--help]"); + +- wxMessageBox(msg, "About CTSim", wxOK | wxICON_INFORMATION, this); +- *theApp->getLog() << msg << "\n"; ++ wxMessageBox(msg, _T("About CTSim"), wxOK | wxICON_INFORMATION, this); ++ *theApp->getLog() << msg << wxConvUTF8.cMB2WX("\n"); + } + } + +@@ -1065,7 +1090,7 @@ + ProjectionFileDocument* + CTSimApp::newProjectionDoc() + { +- ProjectionFileDocument* newDoc = dynamic_cast(m_pDocTemplProjection->CreateDocument ("")); ++ ProjectionFileDocument* newDoc = dynamic_cast(m_pDocTemplProjection->CreateDocument (_T(""))); + if (newDoc) { + newDoc->SetDocumentName (m_pDocTemplProjection->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplProjection); +@@ -1078,7 +1103,7 @@ + ImageFileDocument* + CTSimApp::newImageDoc() + { +- ImageFileDocument* newDoc = dynamic_cast(m_pDocTemplImage->CreateDocument ("")); ++ ImageFileDocument* newDoc = dynamic_cast(m_pDocTemplImage->CreateDocument (_T(""))); + if (newDoc) { + newDoc->SetDocumentName (m_pDocTemplImage->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplImage); +@@ -1091,7 +1116,7 @@ + PlotFileDocument* + CTSimApp::newPlotDoc() + { +- PlotFileDocument* newDoc = dynamic_cast(m_pDocTemplPlot->CreateDocument ("")); ++ PlotFileDocument* newDoc = dynamic_cast(m_pDocTemplPlot->CreateDocument (_T(""))); + if (newDoc) { + newDoc->SetDocumentName (m_pDocTemplPlot->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplPlot); +@@ -1106,9 +1131,9 @@ + CTSimApp::newTextDoc() + { + wxString strFilename (getUntitledFilename()); +- strFilename += ".txt"; ++ strFilename += wxString(".txt", *wxConvCurrent); + +- TextFileDocument* newDoc = dynamic_cast(m_pDocTemplText->CreateDocument ("")); ++ TextFileDocument* newDoc = dynamic_cast(m_pDocTemplText->CreateDocument (_T(""))); + if (newDoc) { + newDoc->SetDocumentName (m_pDocTemplText->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplText); +@@ -1122,7 +1147,7 @@ + PhantomFileDocument* + CTSimApp::newPhantomDoc() + { +- PhantomFileDocument* newDoc = dynamic_cast(m_pDocTemplPhantom->CreateDocument ("")); ++ PhantomFileDocument* newDoc = dynamic_cast(m_pDocTemplPhantom->CreateDocument (_T(""))); + if (newDoc) { + newDoc->SetDocumentName (m_pDocTemplPhantom->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplPhantom); +@@ -1137,7 +1162,7 @@ + Graph3dFileDocument* + CTSimApp::newGraph3dDoc() + { +- Graph3dFileDocument* newDoc = dynamic_cast(m_pDocTemplGraph3d->CreateDocument ("")); ++ Graph3dFileDocument* newDoc = dynamic_cast(m_pDocTemplGraph3d->CreateDocument (_T(""))); + if (newDoc) { + newDoc->SetDocumentName (m_pDocTemplGraph3d->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplGraph3d); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dialogs.cpp ctsim-wx2.8/src/dialogs.cpp +--- ctsim/src/dialogs.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/dialogs.cpp 2008-07-21 10:08:10.892315253 -0600 +@@ -57,12 +57,14 @@ + // StringValueAndTitleListBox + /////////////////////////////////////////////////////////////////////// + +-StringValueAndTitleListBox::StringValueAndTitleListBox (wxDialog* pParent, int nChoices, const char* const aszTitle[], const char* const aszValue[]) ++StringValueAndTitleListBox::StringValueAndTitleListBox (wxDialog* pParent, int nChoices, ++ wxChar const* const* asTitle, ++ char const* const* aszValue) + : wxListBox () + { + wxString* psTitle = new wxString [nChoices]; + for (int i = 0; i < nChoices; i++) +- psTitle[i] = aszTitle[i]; ++ psTitle[i] = asTitle[i]; + + Create (pParent, -1, wxDefaultPosition, wxSize(-1,-1), nChoices, psTitle, wxLB_SINGLE | wxLB_NEEDED_SB); + +@@ -76,12 +78,16 @@ + return m_ppszValues[GetSelection()]; + } + +-StringValueAndTitleRadioBox::StringValueAndTitleRadioBox (wxDialog* pParent, const wxString& strTitle, int nChoices, const char* const aszTitle[], const char* const aszValue[]) ++StringValueAndTitleRadioBox::StringValueAndTitleRadioBox (wxDialog* pParent, ++ wxChar const* strTitle, ++ int nChoices, ++ char const* const* aszTitle, ++ char const* const* aszValue) + : wxRadioBox () + { + wxString* psTitle = new wxString [nChoices]; + for (int i = 0; i < nChoices; i++) +- psTitle[i] = aszTitle[i]; ++ psTitle[i] = wxConvUTF8.cMB2WX(aszTitle[i]); + + Create (pParent, -1, strTitle, wxDefaultPosition, wxDefaultSize, nChoices, psTitle, 1, wxRA_SPECIFY_COLS); + +@@ -89,6 +95,8 @@ + delete [] psTitle; + }; + ++ ++ + const char* + StringValueAndTitleRadioBox::getSelectionStringValue () const + { +@@ -105,7 +113,7 @@ + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, "Select Phantom"), 0, wxCENTER | wxALL, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, _T("Select Phantom")), 0, wxCENTER | wxALL, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + +@@ -116,9 +124,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PHANTOM); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -149,11 +157,11 @@ + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, "Select Theta Range"), 0, wxCENTER | wxALL, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, _T("Select Theta Range")), 0, wxCENTER | wxALL, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + +- wxString asTitle[] = {"Unconstrained", "Normalized to 2pi", "Fold to pi"}; ++ wxString asTitle[] = {_T("Unconstrained"), _T("Normalized to 2pi"), _T("Fold to pi")}; + + m_pRadioBoxThetaRange = new wxRadioBox (this, -1, _T("Theta Range"), wxDefaultPosition, wxDefaultSize, 3, asTitle, 1, wxRA_SPECIFY_COLS); + if (iDefaultThetaRange == ParallelRaysums::THETA_RANGE_UNCONSTRAINED) +@@ -168,9 +176,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_THETA_RANGE); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -202,12 +210,13 @@ + // DialogGetComparisonImage + /////////////////////////////////////////////////////////////////////// + +-DialogGetComparisonImage::DialogGetComparisonImage (wxWindow* pParent, const char* const pszTitle, const std::vector& rVecIF, bool bShowMakeDifference) +-: wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_rVecIF(rVecIF) ++DialogGetComparisonImage::DialogGetComparisonImage (wxWindow* pParent, wxChar const* pwszTitle, ++ const std::vector& rVecIF, bool bShowMakeDifference) ++: wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_rVecIF(rVecIF) + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxALL, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxALL, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5); + +@@ -226,7 +235,7 @@ + pTopSizer->Add (m_pListBoxImageChoices, 0, wxALL | wxALIGN_CENTER | wxEXPAND); + + if (bShowMakeDifference) { +- m_pMakeDifferenceImage = new wxCheckBox (this, -1, "Make Difference Image"); ++ m_pMakeDifferenceImage = new wxCheckBox (this, -1, _T("Make Difference Image")); + m_pMakeDifferenceImage->SetValue (FALSE); + pTopSizer->Add (m_pMakeDifferenceImage, 0, wxALL | wxALIGN_CENTER | wxEXPAND); + } else +@@ -235,9 +244,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_COMPARISON); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -271,34 +280,35 @@ + // CLASS DiaglogPreferences Implementation + ///////////////////////////////////////////////////////////////////// + +-DialogPreferences::DialogPreferences (wxWindow* pParent, const char* const pszTitle, +- bool bAdvancedOptions, bool bAskDeleteNewDocs, bool bVerboseLogging, bool bStartupTips, bool bUseBackgroundTasks) +-: wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION) ++DialogPreferences::DialogPreferences (wxWindow* pParent, wxChar const* pwszTitle, ++ bool bAdvancedOptions, bool bAskDeleteNewDocs, bool bVerboseLogging, bool bStartupTips, ++ bool bUseBackgroundTasks) ++: wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION) + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + +- m_pCBAdvancedOptions = new wxCheckBox (this, -1, "Advanced Options", wxDefaultPosition, wxSize(250, 25), 0); ++ m_pCBAdvancedOptions = new wxCheckBox (this, -1, _T("Advanced Options"), wxDefaultPosition, wxSize(250, 25), 0); + m_pCBAdvancedOptions->SetValue (bAdvancedOptions); + pTopSizer->Add (m_pCBAdvancedOptions, 0, wxALIGN_CENTER_VERTICAL); + +- m_pCBAskDeleteNewDocs = new wxCheckBox (this, -1, "Ask \"Save New Documents\" Before Closing", wxDefaultPosition, wxSize(250, 25), 0); ++ m_pCBAskDeleteNewDocs = new wxCheckBox (this, -1, _T("Ask \"Save New Documents\" Before Closing"), wxDefaultPosition, wxSize(250, 25), 0); + m_pCBAskDeleteNewDocs->SetValue (bAskDeleteNewDocs); + pTopSizer->Add (m_pCBAskDeleteNewDocs, 0, wxALIGN_CENTER_VERTICAL); + +- m_pCBVerboseLogging = new wxCheckBox (this, -1, "Verbose Logging", wxDefaultPosition, wxSize(250, 25), 0); ++ m_pCBVerboseLogging = new wxCheckBox (this, -1, _T("Verbose Logging"), wxDefaultPosition, wxSize(250, 25), 0); + m_pCBVerboseLogging->SetValue (bVerboseLogging); + pTopSizer->Add (m_pCBVerboseLogging, 0, wxALIGN_CENTER_VERTICAL); + +- m_pCBStartupTips = new wxCheckBox (this, -1, "Show Tips at Start", wxDefaultPosition, wxSize(250, 25), 0); ++ m_pCBStartupTips = new wxCheckBox (this, -1, _T("Show Tips at Start"), wxDefaultPosition, wxSize(250, 25), 0); + m_pCBStartupTips->SetValue (bStartupTips); + pTopSizer->Add (m_pCBStartupTips, 0, wxALIGN_CENTER_VERTICAL); + + #if HAVE_WXTHREADS && MSVC +- m_pCBUseBackgroundTasks = new wxCheckBox (this, -1, "Put Tasks in Background", wxDefaultPosition, wxSize(250, 25), 0); ++ m_pCBUseBackgroundTasks = new wxCheckBox (this, -1, _T("Put Tasks in Background"), wxDefaultPosition, wxSize(250, 25), 0); + m_pCBUseBackgroundTasks->SetValue (bUseBackgroundTasks); + pTopSizer->Add (m_pCBUseBackgroundTasks, 0, wxALIGN_CENTER_VERTICAL); + #endif +@@ -306,9 +316,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PREFERENCES); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -365,35 +375,35 @@ + // CLASS DiaglogGetMinMax Implementation + ///////////////////////////////////////////////////////////////////// + +-DialogGetMinMax::DialogGetMinMax (wxWindow* pParent, const char* const pszTitle, double dDefaultMin, double dDefaultMax) +-: wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION) ++DialogGetMinMax::DialogGetMinMax (wxWindow* pParent, wxChar const* pwszTitle, double dDefaultMin, double dDefaultMax) ++: wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION) + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + +- std::ostringstream os; +- os << dDefaultMin; +- m_pTextCtrlMin = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- std::ostringstream osMax; +- osMax << dDefaultMax; +- m_pTextCtrlMax = new wxTextCtrl (this, -1, osMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); ++ wxString sMin; ++ sMin << dDefaultMin; ++ m_pTextCtrlMin = new wxTextCtrl (this, -1, sMin, wxDefaultPosition, wxSize(100, 25), 0); ++ wxString sMax; ++ sMax << dDefaultMax; ++ m_pTextCtrlMax = new wxTextCtrl (this, -1, sMax, wxDefaultPosition, wxSize(100, 25), 0); + + wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2); +- pGridSizer->Add (new wxStaticText (this, -1, "Minimum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Minimum")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlMin, 0, wxALIGN_CENTER_VERTICAL); +- pGridSizer->Add (new wxStaticText (this, -1, "Maximum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Maximum")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlMax, 0, wxALIGN_CENTER_VERTICAL); + pTopSizer->Add (pGridSizer, 1, wxALL, 10); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_MINMAX); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -443,30 +453,30 @@ + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, "Auto Scale Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, _T("Auto Scale Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + +- wxString asTitle[] = {"Mode", "Median", "Mean"}; ++ wxString asTitle[] = {_T("Mode"), _T("Median"), _T("Mean")}; + + m_pRadioBoxCenter = new wxRadioBox (this, -1, _T("Center"), wxDefaultPosition, wxDefaultSize, 3, asTitle, 1, wxRA_SPECIFY_COLS); + m_pRadioBoxCenter->SetSelection (0); + pTopSizer->Add (m_pRadioBoxCenter, 0, wxALL | wxALIGN_CENTER); + + wxGridSizer *pGridSizer = new wxGridSizer (2); +- pGridSizer->Add (new wxStaticText (this, -1, "Standard Deviation Factor"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); +- std::ostringstream osDefaultFactor; +- osDefaultFactor << dDefaultScaleFactor; +- m_pTextCtrlStdDevFactor = new wxTextCtrl (this, -1, osDefaultFactor.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Standard Deviation Factor")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sDefaultFactor; ++ sDefaultFactor << dDefaultScaleFactor; ++ m_pTextCtrlStdDevFactor = new wxTextCtrl (this, -1, sDefaultFactor, wxDefaultPosition, wxSize(100, 25), 0); + pGridSizer->Add (m_pTextCtrlStdDevFactor, 0, wxALIGN_CENTER_VERTICAL); + pTopSizer->Add (pGridSizer, 1, wxALL, 10); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_AUTOSCALE); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -493,13 +503,13 @@ + wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue(); + double dValue; + if (! sStddevFactor.ToDouble (&dValue)) { +- *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n"; ++ *theApp->getLog() << _T("Error: Non-numeric Standard Deviation Factor of ") << sStddevFactor << _T("\n"); + return false; + } + double dHalfWidth = dValue * m_dStdDev / 2; + *pMin = dCenter - dHalfWidth; + *pMax = dCenter + dHalfWidth; +- *theApp->getLog() << "Setting minimum to " << *pMin << " and maximum to " << *pMax << "\n"; ++ *theApp->getLog() << _T("Setting minimum to ") << *pMin << _T(" and maximum to ") << *pMax << _T("\n"); + + return true; + } +@@ -510,7 +520,7 @@ + wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue(); + double dValue = 1.; + if (! sStddevFactor.ToDouble (&dValue)) { +- *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n"; ++ *theApp->getLog() << _T("Error: Non-numeric Standard Deviation Factor of ") << sStddevFactor << _T("\n"); + } + + return dValue; +@@ -530,30 +540,30 @@ + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, "Rasterization Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, _T("Rasterization Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2); +- std::ostringstream os; +- os << iDefaultXSize; +- m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sXSize; ++ sXSize << iDefaultXSize; ++ m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL); +- std::ostringstream osYSize; +- osYSize << iDefaultYSize; +- m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sYSize; ++ sYSize << iDefaultYSize; ++ m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL); +- std::ostringstream osViewRatio; +- osViewRatio << dDefaultViewRatio; +- m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, osViewRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "View Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sViewRatio; ++ sViewRatio << dDefaultViewRatio; ++ m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, sViewRatio, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("View Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL); +- std::ostringstream osNSamples; +- osNSamples << iDefaultNSamples; +- m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "Samples per Pixel"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sNSamples; ++ sNSamples << iDefaultNSamples; ++ m_pTextCtrlNSamples = new wxTextCtrl (this, -1, sNSamples, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Samples per Pixel")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL); + + pTopSizer->Add (pGridSizer, 1, wxALL, 10); +@@ -561,9 +571,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_RASTERIZE); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -653,7 +663,7 @@ + m_iDefaultTrace = iDefaultTrace; + m_iDefaultGeometry = iDefaultGeometry; + +- pTopSizer->Add (new wxStaticText (this, -1, "Projection Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, _T("Projection Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + +@@ -668,58 +678,58 @@ + pGridSizer->Add (m_pRadioBoxTrace, 0, wxALL | wxALIGN_CENTER | wxEXPAND); + + wxFlexGridSizer* pText1Sizer = new wxFlexGridSizer(2); +- std::ostringstream os; +- os << iDefaultNDet; +- m_pTextCtrlNDet = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pText1Sizer->Add (new wxStaticText (this, -1, "Detectors"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sNDet; ++ sNDet << iDefaultNDet; ++ m_pTextCtrlNDet = new wxTextCtrl (this, -1, sNDet, wxDefaultPosition, wxSize(100, 25), 0); ++ pText1Sizer->Add (new wxStaticText (this, -1, _T("Detectors")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pText1Sizer->Add (m_pTextCtrlNDet, 0, wxALIGN_CENTER_VERTICAL); +- std::ostringstream osNView; +- osNView << iDefaultNView; +- m_pTextCtrlNView = new wxTextCtrl (this, -1, osNView.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pText1Sizer->Add (new wxStaticText (this, -1, "Views"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sNView; ++ sNView << iDefaultNView; ++ m_pTextCtrlNView = new wxTextCtrl (this, -1, sNView, wxDefaultPosition, wxSize(100, 25), 0); ++ pText1Sizer->Add (new wxStaticText (this, -1, _T("Views")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pText1Sizer->Add (m_pTextCtrlNView, 0, wxALIGN_CENTER_VERTICAL); +- std::ostringstream osNSamples; +- osNSamples << iDefaultNSamples; +- m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pText1Sizer->Add (new wxStaticText (this, -1, "Samples per Detector"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sNSamples; ++ sNSamples << iDefaultNSamples; ++ m_pTextCtrlNSamples = new wxTextCtrl (this, -1, sNSamples, wxDefaultPosition, wxSize(100, 25), 0); ++ pText1Sizer->Add (new wxStaticText (this, -1, _T("Samples per Detector")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pText1Sizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL); + + pGridSizer->Add (pText1Sizer); + + wxFlexGridSizer* pText2Sizer = new wxFlexGridSizer(2); +- std::ostringstream osViewRatio; +- osViewRatio << dDefaultViewRatio; +- m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, osViewRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pText2Sizer->Add (new wxStaticText (this, -1, "View Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sViewRatio; ++ sViewRatio << dDefaultViewRatio; ++ m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, sViewRatio, wxDefaultPosition, wxSize(100, 25), 0); ++ pText2Sizer->Add (new wxStaticText (this, -1, _T("View Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pText2Sizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL); +- std::ostringstream osScanRatio; +- osScanRatio << dDefaultScanRatio; +- m_pTextCtrlScanRatio = new wxTextCtrl (this, -1, osScanRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pText2Sizer->Add (new wxStaticText (this, -1, "Scan Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sScanRatio; ++ sScanRatio << dDefaultScanRatio; ++ m_pTextCtrlScanRatio = new wxTextCtrl (this, -1, sScanRatio, wxDefaultPosition, wxSize(100, 25), 0); ++ pText2Sizer->Add (new wxStaticText (this, -1, _T("Scan Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pText2Sizer->Add (m_pTextCtrlScanRatio, 0, wxALIGN_CENTER_VERTICAL); +- std::ostringstream osFocalLength; +- osFocalLength << dDefaultFocalLength; +- m_pTextCtrlFocalLength = new wxTextCtrl (this, -1, osFocalLength.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pText2Sizer->Add (new wxStaticText (this, -1, "Focal Length Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sFocalLength; ++ sFocalLength << dDefaultFocalLength; ++ m_pTextCtrlFocalLength = new wxTextCtrl (this, -1, sFocalLength, wxDefaultPosition, wxSize(100, 25), 0); ++ pText2Sizer->Add (new wxStaticText (this, -1, _T("Focal Length Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pText2Sizer->Add (m_pTextCtrlFocalLength, 0, wxALIGN_CENTER_VERTICAL); + + if (theApp->getAdvancedOptions()) { +- std::ostringstream osCenterDetectorLength; +- osCenterDetectorLength << dDefaultCenterDetectorLength; +- m_pTextCtrlCenterDetectorLength = new wxTextCtrl (this, -1, osCenterDetectorLength.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pText2Sizer->Add (new wxStaticText (this, -1, "Center-Detector Length Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sCenterDetectorLength; ++ sCenterDetectorLength << dDefaultCenterDetectorLength; ++ m_pTextCtrlCenterDetectorLength = new wxTextCtrl (this, -1, sCenterDetectorLength, wxDefaultPosition, wxSize(100, 25), 0); ++ pText2Sizer->Add (new wxStaticText (this, -1, _T("Center-Detector Length Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pText2Sizer->Add (m_pTextCtrlCenterDetectorLength, 0, wxALIGN_CENTER_VERTICAL); + +- std::ostringstream osRotAngle; +- osRotAngle << dDefaultRotAngle; +- m_pTextCtrlRotAngle = new wxTextCtrl (this, -1, osRotAngle.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pText2Sizer->Add (new wxStaticText (this, -1, "Rotation Angle (Fraction of circle)"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sRotAngle; ++ sRotAngle << dDefaultRotAngle; ++ m_pTextCtrlRotAngle = new wxTextCtrl (this, -1, sRotAngle, wxDefaultPosition, wxSize(100, 25), 0); ++ pText2Sizer->Add (new wxStaticText (this, -1, _T("Rotation Angle (Fraction of circle)")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pText2Sizer->Add (m_pTextCtrlRotAngle, 0, wxALIGN_CENTER_VERTICAL); + +- std::ostringstream osOffsetView; +- osOffsetView << iDefaultOffsetView; +- m_pTextCtrlOffsetView = new wxTextCtrl (this, -1, osOffsetView.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pText2Sizer->Add (new wxStaticText (this, -1, "Gantry offset in units of 'views' "), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sOffsetView; ++ sOffsetView << iDefaultOffsetView; ++ m_pTextCtrlOffsetView = new wxTextCtrl (this, -1, sOffsetView, wxDefaultPosition, wxSize(100, 25), 0); ++ pText2Sizer->Add (new wxStaticText (this, -1, _T("Gantry offset in units of 'views' ")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pText2Sizer->Add (m_pTextCtrlOffsetView, 0, wxALIGN_CENTER_VERTICAL); + + } +@@ -730,9 +740,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PROJECTIONS); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -907,7 +917,7 @@ + m_dDefaultRoiYMin = pDefaultROI->m_dYMin; + m_dDefaultRoiYMax = pDefaultROI->m_dYMax; + +- pTopSizer->Add (new wxStaticText (this, -1, "Filtered Backprojection Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, _T("Filtered Backprojection Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxFlexGridSizer* pGridSizer = NULL; +@@ -966,61 +976,61 @@ + pGridSizer->Add (m_pRadioBoxTrace); + + wxFlexGridSizer* pTextGridSizer = new wxFlexGridSizer (2); +- std::ostringstream os; +- os << iDefaultXSize; +- m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pTextGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sXSize; ++ sXSize << iDefaultXSize; ++ m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0); ++ pTextGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pTextGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); +- std::ostringstream osYSize; +- osYSize << iDefaultYSize; +- m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pTextGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sYSize; ++ sYSize << iDefaultYSize; ++ m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0); ++ pTextGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pTextGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + +- std::ostringstream osHammingParam; +- osHammingParam << dDefaultHammingParam; +- m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osHammingParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pTextGridSizer->Add (new wxStaticText (this, -1, "Hamming Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sHammingParam; ++ sHammingParam << dDefaultHammingParam; ++ m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, sHammingParam, wxDefaultPosition, wxSize(100, 25), 0); ++ pTextGridSizer->Add (new wxStaticText (this, -1, _T("Hamming Parameter")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pTextGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + + if (theApp->getAdvancedOptions()) { +- std::ostringstream osZeropad; +- osZeropad << iDefaultZeropad; +- m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pTextGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sZeropad; ++ sZeropad << iDefaultZeropad; ++ m_pTextCtrlZeropad = new wxTextCtrl (this, -1, sZeropad, wxDefaultPosition, wxSize(100, 25), 0); ++ pTextGridSizer->Add (new wxStaticText (this, -1, _T("Zeropad")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pTextGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + } + pGridSizer->Add (pTextGridSizer); + + #if HAVE_FREQ_PREINTERP +- std::ostringstream osInterpParam; +- osInterpParam << iDefaultInterpParam; +- m_pTextCtrlInterpParam = new wxTextCtrl (this, -1, osInterpParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "Interpolation Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sInterpParam; ++ sInterpParam << iDefaultInterpParam; ++ m_pTextCtrlInterpParam = new wxTextCtrl (this, -1, sInterpParam, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Interpolation Parameter")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlInterpParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + #endif + + if (theApp->getAdvancedOptions()) { + wxFlexGridSizer* pROIGridSizer = new wxFlexGridSizer (2); +- std::ostringstream osRoiXMin; +- osRoiXMin << m_dDefaultRoiXMin; +- m_pTextCtrlRoiXMin = new wxTextCtrl (this, -1, osRoiXMin.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pROIGridSizer->Add (new wxStaticText (this, -1, "ROI XMin"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sRoiXMin; ++ sRoiXMin << m_dDefaultRoiXMin; ++ m_pTextCtrlRoiXMin = new wxTextCtrl (this, -1, sRoiXMin, wxDefaultPosition, wxSize(100, 25), 0); ++ pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI XMin")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pROIGridSizer->Add (m_pTextCtrlRoiXMin, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); +- std::ostringstream osRoiXMax; +- osRoiXMax << m_dDefaultRoiXMax; +- m_pTextCtrlRoiXMax = new wxTextCtrl (this, -1, osRoiXMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pROIGridSizer->Add (new wxStaticText (this, -1, "ROI XMax"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sRoiXMax; ++ sRoiXMax << m_dDefaultRoiXMax; ++ m_pTextCtrlRoiXMax = new wxTextCtrl (this, -1, sRoiXMax, wxDefaultPosition, wxSize(100, 25), 0); ++ pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI XMax")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pROIGridSizer->Add (m_pTextCtrlRoiXMax, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); +- std::ostringstream osRoiYMin; +- osRoiYMin << m_dDefaultRoiYMin; +- m_pTextCtrlRoiYMin = new wxTextCtrl (this, -1, osRoiYMin.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pROIGridSizer->Add (new wxStaticText (this, -1, "ROI YMin"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sRoiYMin; ++ sRoiYMin << m_dDefaultRoiYMin; ++ m_pTextCtrlRoiYMin = new wxTextCtrl (this, -1, sRoiYMin, wxDefaultPosition, wxSize(100, 25), 0); ++ pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI YMin")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pROIGridSizer->Add (m_pTextCtrlRoiYMin, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); +- std::ostringstream osRoiYMax; +- osRoiYMax << m_dDefaultRoiYMax; +- m_pTextCtrlRoiYMax = new wxTextCtrl (this, -1, osRoiYMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pROIGridSizer->Add (new wxStaticText (this, -1, "ROI YMax"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sRoiYMax; ++ sRoiYMax << m_dDefaultRoiYMax; ++ m_pTextCtrlRoiYMax = new wxTextCtrl (this, -1, sRoiYMax, wxDefaultPosition, wxSize(100, 25), 0); ++ pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI YMax")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pROIGridSizer->Add (m_pTextCtrlRoiYMax, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + + pGridSizer->Add (pROIGridSizer); +@@ -1031,9 +1041,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_RECONSTRUCTION); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -1211,7 +1221,7 @@ + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, "Filter Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, _T("Filter Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2); +@@ -1224,40 +1234,40 @@ + m_pRadioBoxDomain->SetSelection (iDefaultDomainID); + pGridSizer->Add (m_pRadioBoxDomain, 0, wxALL | wxALIGN_LEFT | wxEXPAND); + +- std::ostringstream os; +- os << iDefaultXSize; +- m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sXSize; ++ sXSize << iDefaultXSize; ++ m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + +- std::ostringstream osYSize; +- osYSize << iDefaultYSize; +- m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sYSize; ++ sYSize << iDefaultYSize; ++ m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + +- std::ostringstream osFilterParam; +- osFilterParam << dDefaultFilterParam; +- m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osFilterParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "Filter Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sFilterParam; ++ sFilterParam << dDefaultFilterParam; ++ m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, sFilterParam, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Filter Parameter")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + +- std::ostringstream osBandwidth; +- osBandwidth << dDefaultBandwidth; +- m_pTextCtrlBandwidth = new wxTextCtrl (this, -1, osBandwidth.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "Bandwidth"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sBandwidth; ++ sBandwidth << dDefaultBandwidth; ++ m_pTextCtrlBandwidth = new wxTextCtrl (this, -1, sBandwidth, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Bandwidth")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlBandwidth, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + +- std::ostringstream osInputScale; +- osInputScale << dDefaultInputScale; +- m_pTextCtrlInputScale = new wxTextCtrl (this, -1, osInputScale.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "Axis (input) Scale"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sInputScale; ++ sInputScale << dDefaultInputScale; ++ m_pTextCtrlInputScale = new wxTextCtrl (this, -1, sInputScale, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Axis (input) Scale")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlInputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + +- std::ostringstream osOutputScale; +- osOutputScale << dDefaultOutputScale; +- m_pTextCtrlOutputScale = new wxTextCtrl (this, -1, osOutputScale.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pGridSizer->Add (new wxStaticText (this, -1, "Filter Output Scale"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sOutputScale; ++ sOutputScale << dDefaultOutputScale; ++ m_pTextCtrlOutputScale = new wxTextCtrl (this, -1, sOutputScale, wxDefaultPosition, wxSize(100, 25), 0); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Filter Output Scale")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlOutputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + + pTopSizer->Add (pGridSizer, 1, wxALL, 3); +@@ -1265,9 +1275,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_FILTER); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -1376,7 +1386,7 @@ + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, "Select Export Format"), 0, wxALIGN_CENTER | wxALL, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, _T("Select Export Format")), 0, wxALIGN_CENTER | wxALL, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5); + +@@ -1388,9 +1398,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_EXPORT); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -1421,7 +1431,7 @@ + { + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, "Select Import Format"), 0, wxALIGN_CENTER | wxALL, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, _T("Select Import Format")), 0, wxALIGN_CENTER | wxALL, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5); + +@@ -1433,9 +1443,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_IMPORT); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +@@ -1460,38 +1470,38 @@ + // CLASS DiaglogGetXYSize Implementation + ///////////////////////////////////////////////////////////////////// + +-DialogGetXYSize::DialogGetXYSize (wxWindow* pParent, const char* const pszTitle, int iDefaultXSize, int iDefaultYSize) +-: wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION) ++DialogGetXYSize::DialogGetXYSize (wxWindow* pParent, wxChar const * pwszTitle, int iDefaultXSize, int iDefaultYSize) ++: wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION) + { + m_iDefaultXSize = iDefaultXSize; + m_iDefaultYSize = iDefaultYSize; + + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + +- std::ostringstream os; +- os << iDefaultXSize; +- m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- std::ostringstream osYSize; +- osYSize << iDefaultYSize; +- m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); ++ wxString sXSize; ++ sXSize << iDefaultXSize; ++ m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0); ++ wxString sYSize; ++ sYSize << iDefaultYSize; ++ m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0); + + wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2); +- pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL); +- pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ pGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL); + pTopSizer->Add (pGridSizer, 1, wxALL, 10); + + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + + pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER); +@@ -1537,9 +1547,9 @@ + // DialogGetConvertPolarParameters + ///////////////////////////////////////////////////////////////////// + +-DialogGetConvertPolarParameters::DialogGetConvertPolarParameters (wxWindow* pParent, const char* const pszTitle, ++DialogGetConvertPolarParameters::DialogGetConvertPolarParameters (wxWindow* pParent, wxChar const * pwszTitle, + int iDefaultXSize, int iDefaultYSize, int iDefaultInterpolationID, int iDefaultZeropad, int iHelpID) +-: wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION) ++: wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION) + { + m_iDefaultXSize = iDefaultXSize; + m_iDefaultYSize = iDefaultYSize; +@@ -1547,7 +1557,7 @@ + + wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL); + +- pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); ++ pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5); + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (1); +@@ -1557,21 +1567,21 @@ + pGridSizer->Add (m_pRadioBoxInterpolation, 0, wxALL | wxALIGN_CENTER); + + wxFlexGridSizer* pTextGridSizer = new wxFlexGridSizer (2); +- std::ostringstream os; +- os << iDefaultXSize; +- m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pTextGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sXSize; ++ sXSize << iDefaultXSize; ++ m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0); ++ pTextGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pTextGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); +- std::ostringstream osYSize; +- osYSize << iDefaultYSize; +- m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pTextGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sYSize; ++ sYSize << iDefaultYSize; ++ m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0); ++ pTextGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pTextGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + if (m_iDefaultZeropad >= 0) { +- std::ostringstream osZeropad; +- osZeropad << iDefaultZeropad; +- m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); +- pTextGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); ++ wxString sZeropad; ++ sZeropad << iDefaultZeropad; ++ m_pTextCtrlZeropad = new wxTextCtrl (this, -1, sZeropad, wxDefaultPosition, wxSize(100, 25), 0); ++ pTextGridSizer->Add (new wxStaticText (this, -1, _T("Zeropad")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pTextGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + } + +@@ -1582,9 +1592,9 @@ + pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, iHelpID); + pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dialogs.h ctsim-wx2.8/src/dialogs.h +--- ctsim/src/dialogs.h 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/dialogs.h 2008-07-21 10:08:10.892315253 -0600 +@@ -44,7 +44,7 @@ + { + public: + CTSimHelpButton (wxWindow* parent, int id) +- : wxButton (parent, id, "Help") ++ : wxButton (parent, id, _T("Help")) + {} + }; + +@@ -57,7 +57,12 @@ + class StringValueAndTitleListBox : public wxListBox + { + public: +- StringValueAndTitleListBox (wxDialog* pParent, int nChoices, const char* const aszTitle[], const char* const aszValue[]); ++ StringValueAndTitleListBox (wxDialog* pParent, int nChoices, wxChar const* const* asTitle, ++ char const* const aszValue[]); ++ StringValueAndTitleListBox (wxDialog* pParent, int nChoices, wxChar const* title, ++ char const* const* aszTitle, char const* const* aszValue); ++ StringValueAndTitleListBox (wxDialog* pParent, int nChoices, wxChar const* title, ++ wxChar const* const* asTitle, char const* const* aszValue); + + const char* getSelectionStringValue () const; + +@@ -69,7 +74,7 @@ + class StringValueAndTitleRadioBox : public wxRadioBox + { + public: +- StringValueAndTitleRadioBox (wxDialog* pParent, const wxString& strTitle, int nChoices, const char* const aszTitle[], const char* const aszValue[]); ++ StringValueAndTitleRadioBox (wxDialog* pParent, wxChar const* strTitle, int nChoices, const char* const aszTitle[], const char* const aszValue[]); + + const char* getSelectionStringValue () const; + +@@ -108,7 +113,7 @@ + class DialogGetComparisonImage : public wxDialog + { + public: +- DialogGetComparisonImage (wxWindow* pParent, const char* const pszTitle, const std::vector& rVecIF, bool bShowMakeDifference); ++ DialogGetComparisonImage (wxWindow* pParent, wxChar const * pwszTitle, const std::vector& rVecIF, bool bShowMakeDifference); + virtual ~DialogGetComparisonImage () {} + + ImageFileDocument* getImageFileDocument (); +@@ -125,7 +130,7 @@ + class DialogPreferences : public wxDialog + { + public: +- DialogPreferences (wxWindow* pParent, const char* const pszTitle, bool bAdvanced, bool bAskNewDocs, ++ DialogPreferences (wxWindow* pParent, wxChar const* pszTitle, bool bAdvanced, bool bAskNewDocs, + bool bVerboseLogging, bool bStartupTips, bool bUseBackgroundTasks); + virtual ~DialogPreferences (); + +@@ -148,7 +153,7 @@ + class DialogGetMinMax : public wxDialog + { + public: +- DialogGetMinMax (wxWindow* pParent, const char* const pszTitle, double dDefaultMin = 0., double dDefaultMax = 0.); ++ DialogGetMinMax (wxWindow* pParent, wxChar const* pszTitle, double dDefaultMin = 0., double dDefaultMax = 0.); + virtual ~DialogGetMinMax (); + + double getMinimum (); +@@ -373,7 +378,7 @@ + class DialogGetXYSize : public wxDialog + { + public: +- DialogGetXYSize (wxWindow* pParent, const char* const pszTitle, int iDefaultXSize = 1, int iDefaultYSize = 1); ++ DialogGetXYSize (wxWindow* pParent, wxChar const * pwszTitle, int iDefaultXSize = 1, int iDefaultYSize = 1); + virtual ~DialogGetXYSize (); + + unsigned int getXSize (); +@@ -391,7 +396,7 @@ + class DialogGetConvertPolarParameters : public wxDialog + { + public: +- DialogGetConvertPolarParameters (wxWindow* pParent, const char* const pszTitle, int iDefaultXSize = 0, ++ DialogGetConvertPolarParameters (wxWindow* pParent, wxChar const * pwszTitle, int iDefaultXSize = 0, + int iDefaultYSize = 0, int iDefaultInterpolationID = Projections::POLAR_INTERP_BILINEAR, + int iDefaultZeropad = 3, int iHelpID = IDH_DLG_POLAR); + virtual ~DialogGetConvertPolarParameters (); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dlgezplot.cpp ctsim-wx2.8/src/dlgezplot.cpp +--- ctsim/src/dlgezplot.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/dlgezplot.cpp 2008-07-21 10:08:10.900315744 -0600 +@@ -104,7 +104,7 @@ + + + wxEZPlotDialog::wxEZPlotDialog (wxWindow *parent, bool bCancelButton) +-: wxDialog((parent ? parent : theApp->getMainFrame()), -1, wxString("EZPlot"), wxDefaultPosition, wxDefaultSize, wxDIALOG_MODAL), ++: wxDialog((parent ? parent : theApp->getMainFrame()), -1, _T("EZPlot"), wxDefaultPosition, wxDefaultSize, wxDIALOG_MODAL), + m_parentTop(0) + { + if (! parent) +@@ -119,10 +119,10 @@ + pTopSizer->Add (m_pEZPlotCtrl = new EZPlotControl (this), 0, wxALIGN_CENTER | wxALL, 5); + + wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL); +- wxButton* pButtonOk = new wxButton (this, wxID_OK, "Ok"); ++ wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Ok")); + pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10); + if (bCancelButton) { +- wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel"); ++ wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel")); + pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10); + } + pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dlgezplot.h ctsim-wx2.8/src/dlgezplot.h +--- ctsim/src/dlgezplot.h 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/dlgezplot.h 2008-07-21 10:08:10.908316235 -0600 +@@ -57,7 +57,7 @@ + const wxSize& size = wxDefaultSize, + long style = wxSTATIC_BORDER, + const wxValidator& validator = wxDefaultValidator, +- const wxString& name = "EZPlotCtrl"); ++ const wxString& name = _T("EZPlotCtrl")); + + virtual ~EZPlotControl(); + +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dlgprojections.cpp ctsim-wx2.8/src/dlgprojections.cpp +--- ctsim/src/dlgprojections.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/dlgprojections.cpp 2008-07-21 10:08:10.916316725 -0600 +@@ -59,7 +59,7 @@ + + + ProjectionsDialog::ProjectionsDialog (Scanner& rScanner, Projections& rProj, const Phantom& rPhantom, const int iTrace, wxWindow *parent) +- : wxDialog(parent, -1, "Collect Projections", wxDefaultPosition), m_rScanner(rScanner), m_rProjections(rProj), m_rPhantom(rPhantom), ++: wxDialog(parent, -1, _T("Collect Projections"), wxDefaultPosition), m_rScanner(rScanner), m_rProjections(rProj), m_rPhantom(rPhantom), + m_pSGPDriver(NULL), m_pSGP(NULL), m_iTrace(iTrace), m_pDC(NULL), m_btnAbort(0), m_btnPause(0), m_btnStep(0) + { + m_state = Continue; +@@ -79,7 +79,7 @@ + + m_btnAbort->SetConstraints(c); + +- m_btnPause = new wxButton (this, ID_BTN_PAUSE, wxString("Pause")); ++ m_btnPause = new wxButton (this, ID_BTN_PAUSE, _T("Pause")); + wxLayoutConstraints* cPause = new wxLayoutConstraints; + cPause->right.SameAs(this, wxRight, 3*LAYOUT_X_MARGIN + sizeBtn.x); + cPause->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN); +@@ -87,7 +87,7 @@ + cPause->height.Absolute(sizeBtn.y); + m_btnPause->SetConstraints(cPause); + +- m_btnStep = new wxButton (this, ID_BTN_STEP, wxString("Step")); ++ m_btnStep = new wxButton (this, ID_BTN_STEP, _T("Step")); + wxLayoutConstraints* cStep = new wxLayoutConstraints; + cStep->right.SameAs(this, wxRight, 5*LAYOUT_X_MARGIN + sizeBtn.x * 2); + cStep->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN); +@@ -187,7 +187,7 @@ + showView (iViewNumber); + wxYield(); // update the display + if (m_iTrace >= Trace::TRACE_PLOT) { +- ::wxUsleep(500); ++ ::wxMilliSleep(500); + } + } else { + m_state = Finished; // so that we return TRUE below and +@@ -232,12 +232,12 @@ + m_pSGP->setDC (&m_memoryDC); + showView (m_iLastView); + m_state = Paused; +- m_btnPause->SetLabel (wxString("Resume")); ++ m_btnPause->SetLabel (_T("Resume")); + m_pSGP->setDC (m_pDC); + m_memoryDC.SelectObject(wxNullBitmap); + } else if (m_state == Paused) { + m_state = Continue; +- m_btnPause->SetLabel (wxString("Pause")); ++ m_btnPause->SetLabel (_T("Pause")); + } + } + +@@ -252,7 +252,7 @@ + showView (m_iLastView); + // m_rScanner.collectProjections (m_rProjections, m_rPhantom, m_iLastView, 1, true, m_iTrace, m_pSGP); + m_state = Paused; +- m_btnPause->SetLabel (wxString("Resume")); ++ m_btnPause->SetLabel (_T("Resume")); + m_pSGP->setDC (m_pDC); + m_memoryDC.SelectObject(wxNullBitmap); + Refresh(); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dlgreconstruct.cpp ctsim-wx2.8/src/dlgreconstruct.cpp +--- ctsim/src/dlgreconstruct.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/dlgreconstruct.cpp 2008-07-21 10:08:10.920316971 -0600 +@@ -67,7 +67,7 @@ + + ReconstructDialog::ReconstructDialog (Reconstructor& rReconstruct, const Projections& rProj, + ImageFile& rIF, const int iTrace, wxWindow *parent) +-: wxDialog(parent, -1, "Reconstruction", wxDefaultPosition), m_rReconstructor(rReconstruct), ++: wxDialog(parent, -1, _T("Reconstruction"), wxDefaultPosition), m_rReconstructor(rReconstruct), + m_rProjections(rProj), m_rImageFile(rIF), m_pSGPDriver(NULL), m_pSGP(NULL), + m_iTrace(iTrace), m_pDC(NULL), m_btnAbort(0), m_btnPause(0), m_btnStep(0) + { +@@ -77,7 +77,7 @@ + while ( m_parentTop && m_parentTop->GetParent() ) + m_parentTop = m_parentTop->GetParent(); + +- m_btnAbort = new wxButton(this, wxID_CANCEL, _("Cancel")); ++ m_btnAbort = new wxButton(this, wxID_CANCEL, _T("Cancel")); + wxLayoutConstraints* c = new wxLayoutConstraints; + c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN); + c->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN); +@@ -88,7 +88,7 @@ + + m_btnAbort->SetConstraints(c); + +- m_btnPause = new wxButton (this, ID_BTN_PAUSE, wxString("Pause")); ++ m_btnPause = new wxButton (this, ID_BTN_PAUSE, _T("Pause")); + wxLayoutConstraints* cPause = new wxLayoutConstraints; + cPause->right.SameAs(this, wxRight, 3*LAYOUT_X_MARGIN + sizeBtn.x); + cPause->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN); +@@ -96,7 +96,7 @@ + cPause->height.Absolute(sizeBtn.y); + m_btnPause->SetConstraints(cPause); + +- m_btnStep = new wxButton (this, ID_BTN_STEP, wxString("Step")); ++ m_btnStep = new wxButton (this, ID_BTN_STEP, _T("Step")); + wxLayoutConstraints* cStep = new wxLayoutConstraints; + cStep->right.SameAs(this, wxRight, 5*LAYOUT_X_MARGIN + sizeBtn.x * 2); + cStep->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN); +@@ -223,7 +223,7 @@ + showView (iViewNumber, bBackproject); + ::wxYield(); // update the display + if (m_iTrace >= Trace::TRACE_PLOT) { +- ::wxUsleep(250); ++ ::wxMilliSleep(250); + } + } else { + m_state = Finished; // so that we return TRUE below and +@@ -267,12 +267,12 @@ + m_memoryDC.SetFont (*wxSWISS_FONT); + showView (m_iLastView, false); + m_state = Paused; +- m_btnPause->SetLabel (wxString("Resume")); ++ m_btnPause->SetLabel (_T("Resume")); + m_pSGP->setDC (m_pDC); + m_memoryDC.SelectObject(wxNullBitmap); + } else if (m_state == Paused) { + m_state = Continue; +- m_btnPause->SetLabel (wxString("Pause")); ++ m_btnPause->SetLabel (_T("Pause")); + } + } + +@@ -288,7 +288,7 @@ + m_memoryDC.SetFont (*wxSWISS_FONT); + showView (m_iLastView, false); + m_state = Paused; +- m_btnPause->SetLabel (wxString("Resume")); ++ m_btnPause->SetLabel (_T("Resume")); + m_pSGP->setDC (m_pDC); + m_memoryDC.SelectObject(wxNullBitmap); + Refresh(); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/docs.cpp ctsim-wx2.8/src/docs.cpp +--- ctsim/src/docs.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/docs.cpp 2008-07-21 10:08:10.924317216 -0600 +@@ -51,12 +51,12 @@ + + bool ImageFileDocument::OnSaveDocument(const wxString& filename) + { +- if (! m_pImageFile->fileWrite (filename)) { +- *theApp->getLog() << "Unable to write image file " << filename << "\n"; ++ if (! m_pImageFile->fileWrite (filename.mb_str(wxConvUTF8))) { ++ *theApp->getLog() << _T("Unable to write image file ") << filename << _T("\n"); + return false; + } + if (theApp->getVerboseLogging()) +- *theApp->getLog() << "Wrote image file " << filename << "\n"; ++ *theApp->getLog() << _T("Wrote image file ") << filename << _T("\n"); + Modify(false); + return true; + } +@@ -66,14 +66,14 @@ + if (! OnSaveModified()) + return false; + +- if (! m_pImageFile->fileRead (filename.c_str())) { +- *theApp->getLog() << "Unable to read image file " << filename << "\n"; ++ if (! m_pImageFile->fileRead (filename.mb_str(wxConvUTF8))) { ++ *theApp->getLog() << _T("Unable to read image file ") << filename << _T("\n"); + m_bBadFileOpen = true; + return false; + } + +- if (theApp->getVerboseLogging() && filename != "") +- *theApp->getLog() << "Read image file " << filename << "\n"; ++ if (theApp->getVerboseLogging() && filename != _T("")) ++ *theApp->getLog() << _T("Read image file ") << filename << _T("\n"); + + SetFilename(filename, true); + Modify(false); +@@ -106,13 +106,13 @@ + ImageFileDocument::Revert () + { + if (IsModified()) { +- wxString msg ("Revert to saved "); ++ wxString msg (_T("Revert to saved ")); + msg += GetFilename(); +- msg += "?"; +- wxMessageDialog dialog (getView()->getFrame(), msg, "Are you sure?", wxYES_NO | wxNO_DEFAULT); ++ msg += _T("?"); ++ wxMessageDialog dialog (getView()->getFrame(), msg, _T("Are you sure?"), wxYES_NO | wxNO_DEFAULT); + if (dialog.ShowModal() == wxID_YES) { + if (theApp->getVerboseLogging()) +- *theApp->getLog() << "Reverting to saved " << GetFilename() << "\n"; ++ *theApp->getLog() << _T("Reverting to saved ") << GetFilename() << _T("\n"); + Modify (false); + OnOpenDocument (GetFilename()); + } +@@ -177,7 +177,7 @@ + + while (m_vecpBackgroundSupervisors.size() > 0) { + ::wxYield(); +- ::wxUsleep(50); ++ ::wxMilliSleep(50); + } + #endif + } +@@ -190,12 +190,12 @@ + bool + ProjectionFileDocument::OnSaveDocument(const wxString& filename) + { +- if (! m_pProjectionFile->write (filename.c_str())) { +- *theApp->getLog() << "Unable to write projection file " << filename << "\n"; ++ if (! m_pProjectionFile->write (filename.mb_str(wxConvUTF8))) { ++ *theApp->getLog() << _T("Unable to write projection file ") << filename << _T("\n"); + return false; + } + if (theApp->getVerboseLogging()) +- *theApp->getLog() << "Wrote projection file " << filename << "\n"; ++ *theApp->getLog() << _T("Wrote projection file ") << filename << _T("\n"); + Modify(false); + return true; + } +@@ -213,15 +213,15 @@ + if (! OnSaveModified()) + return false; + +- if (! m_pProjectionFile->read (filename.c_str())) { +- *theApp->getLog() << "Unable to read projection file " << filename << "\n"; ++ if (! m_pProjectionFile->read (filename.mb_str(wxConvUTF8))) { ++ *theApp->getLog() << _T("Unable to read projection file ") << filename << _T("\n"); + m_bBadFileOpen = true; + return false; + } + m_bBadFileOpen = false; + +- if (theApp->getVerboseLogging() && filename != "") +- *theApp->getLog() << "Read projection file " << filename << "\n"; ++ if (theApp->getVerboseLogging() && filename != _T("")) ++ *theApp->getLog() << _T("Read projection file ") << filename << _T("\n"); + + SetFilename(filename, true); + Modify(false); +@@ -276,17 +276,17 @@ + wxString filename (constFilename); + + if (wxFile::Exists (filename)) { +- m_phantom.createFromFile (filename); ++ m_phantom.createFromFile (filename.mb_str(wxConvUTF8)); + if (theApp->getVerboseLogging()) +- *theApp->getLog() << "Read phantom file " << filename << "\n"; ++ *theApp->getLog() << _T("Read phantom file ") << filename << _T("\n"); + } else { +- filename.Replace (".phm", ""); +- m_phantom.createFromPhantom (filename); ++ filename.Replace (_T(".phm"), _T("")); ++ m_phantom.createFromPhantom (filename.mb_str(wxConvUTF8)); + } + m_namePhantom = filename; + SetFilename (filename, true); + if (m_phantom.fail()) { +- *theApp->getLog() << "Failure creating phantom " << filename << "\n"; ++ *theApp->getLog() << _T("Failure creating phantom ") << filename << _T("\n"); + m_bBadFileOpen = true; + return false; + } +@@ -301,12 +301,12 @@ + bool + PhantomFileDocument::OnSaveDocument(const wxString& filename) + { +- if (! m_phantom.fileWrite (filename.c_str())) { +- *theApp->getLog() << "Unable to write phantom file " << filename << "\n"; ++ if (! m_phantom.fileWrite (filename.mb_str(wxConvUTF8))) { ++ *theApp->getLog() << _T("Unable to write phantom file ") << filename << _T("\n"); + return false; + } + if (theApp->getVerboseLogging()) +- *theApp->getLog() << "Wrote phantom file " << filename << "\n"; ++ *theApp->getLog() << _T("Wrote phantom file ") << filename << _T("\n"); + Modify(false); + return true; + } +@@ -346,12 +346,12 @@ + PlotFileDocument::OnSaveDocument(const wxString& filename) + { + m_namePlot = filename.c_str(); +- if (! m_plot.fileWrite (filename)) { +- *theApp->getLog() << "Unable to write plot file " << filename << "\n"; ++ if (! m_plot.fileWrite (filename.mb_str(wxConvUTF8))) { ++ *theApp->getLog() << _T("Unable to write plot file ") << filename << _T("\n"); + return false; + } + if (theApp->getVerboseLogging()) +- *theApp->getLog() << "Wrote plot file " << filename << "\n"; ++ *theApp->getLog() << _T("Wrote plot file ") << filename << _T("\n"); + Modify(false); + return true; + } +@@ -362,15 +362,15 @@ + if (! OnSaveModified()) + return false; + +- if (! m_plot.fileRead (filename.c_str())) { +- *theApp->getLog() << "Unable to read plot file " << filename << "\n"; ++ if (! m_plot.fileRead (filename.mb_str(wxConvUTF8))) { ++ *theApp->getLog() << _T("Unable to read plot file ") << filename << _T("\n"); + m_bBadFileOpen = true; + return false; + } + m_bBadFileOpen = false; + +- if (theApp->getVerboseLogging() && filename != "") +- *theApp->getLog() << "Read plot file " << filename << "\n"; ++ if (theApp->getVerboseLogging() && filename != _T("")) ++ *theApp->getLog() << _T("Read plot file ") << filename << _T("\n"); + + SetFilename (filename, true); + m_namePlot = filename.c_str(); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/graph3dview.cpp ctsim-wx2.8/src/graph3dview.cpp +--- ctsim/src/graph3dview.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/graph3dview.cpp 2008-07-21 10:08:10.932317707 -0600 +@@ -154,7 +154,7 @@ + Graph3dFileView::~Graph3dFileView() + { + GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu); +- GetDocumentManager()->ActivateView(this, false, true); ++ GetDocumentManager()->ActivateView(this, false); + } + + bool +@@ -166,7 +166,7 @@ + + m_pFrame->SetClientSize (m_pCanvas->GetBestSize()); + m_pCanvas->SetClientSize (m_pCanvas->GetBestSize()); +- m_pFrame->SetTitle("Graph3dFileView"); ++ m_pFrame->SetTitle(_T("Graph3dFileView")); + + m_pCanvas->SetCurrent(); + InitGL(); +@@ -190,7 +190,7 @@ + Graph3dFileCanvas* pCanvas = new Graph3dFileCanvas (this, parent, wxPoint(-1,-1), wxSize(-1,-1), 0); + + pCanvas->SetBackgroundColour(*wxWHITE); +- pCanvas->Clear(); ++ pCanvas->ClearBackground(); + + return pCanvas; + } +@@ -362,10 +362,11 @@ + void + Graph3dFileView::OnProperties (wxCommandEvent& event) + { +- std::ostringstream os; +- *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n"; +- wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), +- "Imagefile Properties", wxOK | wxICON_INFORMATION); ++ wxString os; ++ *theApp->getLog() << _T(">>>>\n") << os << _T("<<<<\n"); ++ wxMessageDialog dialogMsg (getFrameForChild(), os, ++ _T("Imagefile Properties"), ++ wxOK | wxICON_INFORMATION); + dialogMsg.ShowModal(); + } + +@@ -409,17 +410,17 @@ + if (m_pCanvas) { + m_pCanvas->SetCurrent(); + #ifdef DEBUG +- *theApp->getLog() << "Drawing 3d surface\n"; ++ *theApp->getLog() << _T("Drawing 3d surface\n"); + #endif + Draw(); + m_pCanvas->SwapBuffers(); + } + + if (m_pStatusBar) { +- std::ostringstream os; +- os << "Xangle=" << m_dXRotate << ", Yangle=" << m_dYRotate +- << ", Zangle=" << m_dZRotate; +- m_pStatusBar->SetStatusText (os.str().c_str()); ++ wxString os; ++ os << _T("Xangle=") << m_dXRotate << _T(", Yangle=") << m_dYRotate ++ << _T(", Zangle=") << m_dZRotate; ++ m_pStatusBar->SetStatusText (os); + } + } + +@@ -726,7 +727,7 @@ + if (m_bColorScaleMaxSet) + dMax = m_dColorScaleMax; + +- DialogGetMinMax dialogMinMax (getFrameForChild(), "Set Color Scale Minimum & Maximum", dMin, dMax); ++ DialogGetMinMax dialogMinMax (getFrameForChild(), _T("Set Color Scale Minimum & Maximum"), dMin, dMax); + int retVal = dialogMinMax.ShowModal(); + if (retVal == wxID_OK) { + m_bColorScaleMinSet = true; +@@ -755,9 +756,9 @@ + Graph3dFileView::CreateChildFrame (wxDocument *doc, wxView *view) + { + #if CTSIM_MDI +- wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Graph3dFile Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); ++ wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Graph3dFile Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); + #else +- wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "Graph3dFile Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); ++ wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Graph3dFile Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); + #endif + theApp->setIconForFrame (subframe); + +@@ -770,45 +771,45 @@ + + m_pFileMenu = new wxMenu; + +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P"); +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F"); +- m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O"); +- m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W"); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P")); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F")); ++ m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O")); ++ m_pFileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl-W")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(IFMENU_FILE_PROPERTIES, "P&roperties"); ++ m_pFileMenu->Append(IFMENU_FILE_PROPERTIES, _T("P&roperties")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(wxID_PRINT, "&Print..."); +- m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup..."); +- m_pFileMenu->Append(wxID_PREVIEW, "Print Preview"); ++ m_pFileMenu->Append(wxID_PRINT, _T("&Print...")); ++ m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup...")); ++ m_pFileMenu->Append(wxID_PREVIEW, _T("Print Preview")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces..."); +- m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit"); ++ m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces...")); ++ m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit")); + + GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu); + GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu); + + m_pViewMenu = new wxMenu; +- m_pViewMenu->Append(GRAPH3D_VIEW_WIREFRAME, "Wi&reframe\tCtrl-R", "", true); +- m_pViewMenu->Append(GRAPH3D_VIEW_SMOOTH, "S&mooth\tCtrl-M", "", true); +- m_pViewMenu->Append(GRAPH3D_VIEW_COLOR, "Co&lor\tCtrl-L", "", true); +- m_pViewMenu->Append(GRAPH3D_VIEW_LIGHTING, "Li&ghting\tCtrl-G", "", true); ++ m_pViewMenu->Append(GRAPH3D_VIEW_WIREFRAME, _T("Wi&reframe\tCtrl-R"), _T(""), true); ++ m_pViewMenu->Append(GRAPH3D_VIEW_SMOOTH, _T("S&mooth\tCtrl-M"), _T(""), true); ++ m_pViewMenu->Append(GRAPH3D_VIEW_COLOR, _T("Co&lor\tCtrl-L"), _T(""), true); ++ m_pViewMenu->Append(GRAPH3D_VIEW_LIGHTING, _T("Li&ghting\tCtrl-G"), _T(""), true); + m_pViewMenu->AppendSeparator(); +- m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_MINMAX, "Color Scale S&et Min/Max...\tCtrl-E"); +- m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_AUTO, "Color Scale &Auto...\tCtrl-A"); +- m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_FULL, "Color F&ull Scale\tCtrl-U"); ++ m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_MINMAX, _T("Color Scale S&et Min/Max...\tCtrl-E")); ++ m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_AUTO, _T("Color Scale &Auto...\tCtrl-A")); ++ m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_FULL, _T("Color F&ull Scale\tCtrl-U")); + + + wxMenu *help_menu = new wxMenu; +- help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); +- help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); ++ help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1")); ++ help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About")); + + wxMenuBar *menu_bar = new wxMenuBar; + +- menu_bar->Append(m_pFileMenu, "&File"); +- menu_bar->Append(m_pViewMenu, "&View"); +- menu_bar->Append(help_menu, "&Help"); ++ menu_bar->Append(m_pFileMenu, _T("&File")); ++ menu_bar->Append(m_pViewMenu, _T("&View")); ++ menu_bar->Append(help_menu, _T("&Help")); + + subframe->SetMenuBar(menu_bar); + +@@ -894,7 +895,7 @@ + return; + + wxCommandEvent dummyEvent; +- switch (event.KeyCode()) { ++ switch (event.GetKeyCode()) { + case WXK_LEFT: + m_pView->m_dZRotate += 15.0; + Refresh (false); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadproj.cpp ctsim-wx2.8/src/threadproj.cpp +--- ctsim/src/threadproj.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/threadproj.cpp 2008-07-21 10:08:10.936317952 -0600 +@@ -56,7 +56,7 @@ + + ProjectorSupervisorThread::ProjectorSupervisorThread (PhantomFileView* pProjView, int iNDet, int iNView, int iOffsetView, + const char* pszGeometry, int iNSample, double dRotation, double dFocalLength, double dCenterDetectorLength, +- double dViewRatio, double dScanRatio, const char* const pszLabel) ++ double dViewRatio, double dScanRatio, wxChar const* pszLabel) + : SupervisorThread(), m_pPhantomView(pProjView), m_iNDet(iNDet), m_iNView(iNView), m_iOffsetView(iOffsetView), m_strGeometry(pszGeometry), + m_iNSample(iNSample), m_dRotation(dRotation), m_dFocalLength(dFocalLength), m_dCenterDetectorLength(dCenterDetectorLength), + m_dViewRatio(dViewRatio), m_dScanRatio(dScanRatio), m_strLabel(pszLabel) +@@ -67,7 +67,7 @@ + ProjectorSupervisorThread::Entry() + { + ProjectorSupervisor projSupervisor (this, m_pPhantomView, m_iNDet, m_iNView, m_iOffsetView, +- m_strGeometry.c_str(), m_iNSample, m_dRotation, m_dFocalLength, m_dCenterDetectorLength, m_dViewRatio, m_dScanRatio, m_strLabel.c_str()); ++ m_strGeometry.c_str(), m_iNSample, m_dRotation, m_dFocalLength, m_dCenterDetectorLength, m_dViewRatio, m_dScanRatio, m_strLabel); + + projSupervisor.start(); + while (! projSupervisor.workersDone() && ! projSupervisor.fail() && ! projSupervisor.cancelled()) { +@@ -75,9 +75,9 @@ + } + if (projSupervisor.fail()) + { +- wxString msg ("Error starting Projector supervisor: "); +- msg += projSupervisor.getFailMessage().c_str(); +- msg += "\n"; ++ wxString msg (_T("Error starting Projector supervisor: ")); ++ msg += projSupervisor.getFailMessage(); ++ msg += _T("\n"); + wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); + eventLog.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event +@@ -104,12 +104,12 @@ + + ProjectorSupervisor::ProjectorSupervisor (SupervisorThread* pThread, PhantomFileView* pPhantomView, int iNDet, int iNView, int iOffsetView, + const char* pszGeometry, int iNSample, double dRotation, double dFocalLength, double dCenterDetectorLength, +- double dViewRatio, double dScanRatio, const char* const pszLabel) +- : BackgroundSupervisor (pThread, pPhantomView->GetFrame(), pPhantomView->GetDocument(), "Projecting", iNView), ++ double dViewRatio, double dScanRatio, wxChar const* pszLabel) ++ : BackgroundSupervisor (pThread, pPhantomView->GetFrame(), pPhantomView->GetDocument(), _T("Projecting"), iNView), + m_pPhantomView(pPhantomView), m_pPhantomDoc(pPhantomView->GetDocument()), + m_iNDet(iNDet), m_iNView(iNView), m_iOffsetView(iOffsetView), m_pszGeometry(pszGeometry), m_iNSample(iNSample), + m_dRotation(dRotation), m_dFocalLength(dFocalLength), m_dCenterDetectorLength(dCenterDetectorLength), +- m_dViewRatio(dViewRatio), m_dScanRatio(dScanRatio), m_pszLabel(pszLabel) ++ m_dViewRatio(dViewRatio), m_dScanRatio(dScanRatio), m_strLabel(pszLabel) + { + m_pScanner = new Scanner (m_pPhantomDoc->getPhantom(), m_pszGeometry, m_iNDet, + m_iNView, m_iOffsetView, m_iNSample, m_dRotation, m_dFocalLength, m_dCenterDetectorLength, m_dViewRatio, m_dScanRatio); +@@ -151,12 +151,12 @@ + wxCriticalSectionLocker critsect (doneSection); + + Projections* pProjections = getProjections(); +- pProjections->setRemark (m_pszLabel); ++ pProjections->setRemark (m_strLabel.mb_str(wxConvUTF8)); + pProjections->setCalcTime (getTimerEnd()); + + wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); +- wxString msg (m_pszLabel); +- msg += "\n"; ++ wxString msg (m_strLabel); ++ msg += _T("\n"); + eventLog.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event + +@@ -218,12 +218,12 @@ + { + const Phantom& rPhantom = m_pPhantomView->GetDocument()->getPhantom(); + bool bFail = m_pScanner->fail(); +- std::string failMsg; ++ wxString failMsg; + if (bFail) { +- failMsg = "Unable to make Projector: "; +- failMsg += m_pScanner->failMessage().c_str(); ++ failMsg = _T("Unable to make Projector: "); ++ failMsg += wxConvUTF8.cMB2WX(m_pScanner->failMessage().c_str()); + wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); +- event.SetString( failMsg.c_str() ); ++ event.SetString( failMsg ); + wxPostEvent( theApp->getMainFrame(), event ); + } + else +@@ -234,7 +234,7 @@ + #ifdef DEBUG + if (theApp->getVerboseLogging()) { + wxString msg; +- msg.Printf("Worker thread: Received destroy message at work unit #%d\n", iUnit); ++ msg.Printf(_T("Worker thread: Received destroy message at work unit #%d\n"), iUnit); + wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); + event.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), event ); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadproj.h ctsim-wx2.8/src/threadproj.h +--- ctsim/src/threadproj.h 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/threadproj.h 2008-07-21 10:08:10.944318442 -0600 +@@ -56,12 +56,12 @@ + const double m_dCenterDetectorLength; + const double m_dViewRatio; + const double m_dScanRatio; +- const std::string m_strLabel; ++ const wxString m_strLabel; + + public: + ProjectorSupervisorThread(PhantomFileView* pProjView, int iNDet, int iNView, int iOffsetView, + const char* pszGeometry, int iNSample, double dRotation, double dFocalLength, double dCenterDetectorLength, +- double dViewRatio, double dScanRatio, const char* const pszLabel); ++ double dViewRatio, double dScanRatio, wxChar const* strLabel); + + virtual wxThread::ExitCode Entry(); + +@@ -88,13 +88,13 @@ + const double m_dCenterDetectorLength; + const double m_dViewRatio; + const double m_dScanRatio; +- const char* const m_pszLabel; ++ const wxString m_strLabel; + + + public: + ProjectorSupervisor (SupervisorThread* pThread, PhantomFileView* pProjView, int iNDet, int iNView, int iOffsetView, + const char* pszGeometry, int iNSample, double dRotation, double dFocalLength, double dCenterDetectorLength, +- double dViewRatio, double dScanRatio, const char* const pszLabel); ++ double dViewRatio, double dScanRatio, wxChar const* pszLabel); + + virtual BackgroundWorkerThread* createWorker (int iThread, int iStartUnit, int iNumUnits); + +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadraster.cpp ctsim-wx2.8/src/threadraster.cpp +--- ctsim/src/threadraster.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/threadraster.cpp 2008-07-21 10:08:10.948318688 -0600 +@@ -57,7 +57,7 @@ + ///////////////////////////////////////////////////////////////////// + + RasterizerSupervisorThread::RasterizerSupervisorThread (PhantomFileView* pProjView, int iNX, int iNY, +- int iNSample, double dViewRatio, const char* const pszLabel) ++ int iNSample, double dViewRatio, wxChar const* pszLabel) + : SupervisorThread(), m_pPhantomView(pProjView), m_iNX(iNX), m_iNY(iNY), m_iNSample(iNSample), m_dViewRatio(dViewRatio), m_strLabel(pszLabel) + { + } +@@ -65,7 +65,7 @@ + wxThread::ExitCode + RasterizerSupervisorThread::Entry() + { +- RasterizerSupervisor rasterSupervisor (this, m_pPhantomView, m_iNX, m_iNY, m_iNSample, m_dViewRatio, m_strLabel.c_str()); ++ RasterizerSupervisor rasterSupervisor (this, m_pPhantomView, m_iNX, m_iNY, m_iNSample, m_dViewRatio, m_strLabel); + + rasterSupervisor.start(); + +@@ -75,9 +75,9 @@ + + if (rasterSupervisor.fail()) + { +- wxString msg ("Error starting Rasterizer supervisor: "); +- msg += rasterSupervisor.getFailMessage().c_str(); +- msg += "\n"; ++ wxString msg (_T("Error starting Rasterizer supervisor: ")); ++ msg += rasterSupervisor.getFailMessage(); ++ msg += _T("\n"); + wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); + eventLog.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event +@@ -103,10 +103,10 @@ + ///////////////////////////////////////////////////////////////////// + + RasterizerSupervisor::RasterizerSupervisor (SupervisorThread* pThread, PhantomFileView* pPhantomView, int iNX, int iNY, +- int iNSample, double dViewRatio, const char* const pszLabel) +- : BackgroundSupervisor (pThread, pPhantomView->GetFrame(), pPhantomView->GetDocument(), "Rasterizing", iNX), ++ int iNSample, double dViewRatio, wxChar const* pszLabel) ++ : BackgroundSupervisor (pThread, pPhantomView->GetFrame(), pPhantomView->GetDocument(), _T("Rasterizing"), iNX), + m_pPhantomView(pPhantomView), m_pPhantomDoc(pPhantomView->GetDocument()), +- m_iNX(iNX), m_iNY(iNY), m_iNSample(iNSample), m_dViewRatio(dViewRatio), m_pszLabel(pszLabel) ++ m_iNX(iNX), m_iNY(iNY), m_iNSample(iNSample), m_dViewRatio(dViewRatio), m_strLabel(pszLabel) + { + m_vecpChildImageFiles.reserve (getNumWorkers()); + for (int iThread = 0; iThread < getNumWorkers(); iThread++) { +@@ -137,11 +137,11 @@ + wxCriticalSectionLocker critsect (doneSection); + + ImageFile* pImageFile = getImageFile(); +- pImageFile->labelAdd (m_pszLabel, getTimerEnd()); ++ pImageFile->labelAdd (m_strLabel.mb_str(wxConvUTF8), getTimerEnd()); + + wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); +- wxString msg (m_pszLabel); +- msg += "\n"; ++ wxString msg (m_strLabel); ++ msg += _T("\n"); + eventLog.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event + +@@ -199,7 +199,7 @@ + #ifdef DEBUG + if (theApp->getVerboseLogging()) { + wxString msg; +- msg.Printf("Worker thread: Received destroy message at work unit #%d\n", iUnit); ++ msg.Printf(_T("Worker thread: Received destroy message at work unit #%d\n"), iUnit); + wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); + event.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), event ); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadraster.h ctsim-wx2.8/src/threadraster.h +--- ctsim/src/threadraster.h 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/threadraster.h 2008-07-21 10:08:10.956319178 -0600 +@@ -50,10 +50,10 @@ + const int m_iNY; + const int m_iNSample; + const double m_dViewRatio; +- const std::string m_strLabel; ++ const wxString m_strLabel; + + public: +- RasterizerSupervisorThread(PhantomFileView* pProjView, int iNX, int iNY, int iNSample, double dViewRatio, const char* const pszLabel); ++ RasterizerSupervisorThread(PhantomFileView* pProjView, int iNX, int iNY, int iNSample, double dViewRatio, wxChar const* strLabel); + + virtual wxThread::ExitCode Entry(); + virtual void OnExit(); +@@ -72,12 +72,12 @@ + const int m_iNY; + const int m_iNSample; + const double m_dViewRatio; +- const char* const m_pszLabel; ++ const wxString m_strLabel; + + + public: + RasterizerSupervisor (SupervisorThread* pThread, PhantomFileView* pProjView, int iNX, int iNY, +- int iNSample, double dViewRatio, const char* const pszLabel); ++ int iNSample, double dViewRatio, wxChar const* pszLabel); + + virtual BackgroundWorkerThread* createWorker (int iThread, int iStartUnit, int iNumUnits); + +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadrecon.cpp ctsim-wx2.8/src/threadrecon.cpp +--- ctsim/src/threadrecon.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/threadrecon.cpp 2008-07-21 10:08:10.956319178 -0600 +@@ -54,7 +54,7 @@ + ReconstructorSupervisorThread::ReconstructorSupervisorThread (ProjectionFileView* pProjView, int iNX, int iNY, + const char* pszFilterName, double dFilterParam, const char* pszFilterMethod, int iZeropad, + const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam, +- const char* pszBackprojectName, const char* const pszLabel, ReconstructionROI* pROI, bool bRebinToParallel) ++ const char* pszBackprojectName, wxChar const* pszLabel, ReconstructionROI* pROI, bool bRebinToParallel) + : SupervisorThread(), m_pProjView(pProjView), m_iNX(iNX), m_iNY(iNY), m_strFilterName(pszFilterName), m_dFilterParam(dFilterParam), + m_strFilterMethod(pszFilterMethod), m_iZeropad(iZeropad), m_strFilterGenerationName(pszFilterGenerationName), + m_strInterpName(pszInterpName), m_iInterpParam(iInterpParam), m_strBackprojectName(pszBackprojectName), +@@ -72,7 +72,7 @@ + + ReconstructorSupervisor reconSupervisor (this, pProj, m_pProjView, m_iNX, m_iNY, + m_strFilterName.c_str(), m_dFilterParam, m_strFilterMethod.c_str(), m_iZeropad, m_strFilterGenerationName.c_str(), +- m_strInterpName.c_str(), m_iInterpParam, m_strBackprojectName.c_str(), m_strLabel.c_str(), &m_reconROI); ++ m_strInterpName.c_str(), m_iInterpParam, m_strBackprojectName.c_str(), m_strLabel, &m_reconROI); + + reconSupervisor.start(); + while (! reconSupervisor.workersDone() && ! reconSupervisor.fail() && ! reconSupervisor.cancelled()) { +@@ -80,9 +80,9 @@ + } + if (reconSupervisor.fail()) + { +- wxString msg ("Error starting reconstructor supervisor: "); +- msg += reconSupervisor.getFailMessage().c_str(); +- msg += "\n"; ++ wxString msg (_T("Error starting reconstructor supervisor: ")); ++ msg += reconSupervisor.getFailMessage(); ++ msg += _T("\n"); + wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); + eventLog.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event +@@ -112,14 +112,16 @@ + ReconstructorSupervisor::ReconstructorSupervisor (SupervisorThread* pThread, Projections* pProj, + ProjectionFileView* pProjView, int iImageNX, int iImageNY, const char* pszFilterName, double dFilterParam, + const char* pszFilterMethod, int iZeropad, const char* pszFilterGenerationName, +- const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, const char* const pszLabel, ++ const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, wxChar const* pszLabel, + ReconstructionROI* pROI) +- : BackgroundSupervisor (pThread, pProjView->GetFrame(), pProjView->GetDocument(), "Reconstructing", pProjView->GetDocument()->getProjections().nView()), ++ : BackgroundSupervisor (pThread, pProjView->GetFrame(), pProjView->GetDocument(), ++ _T("Reconstructing"), ++ pProjView->GetDocument()->getProjections().nView()), + m_pProj(pProj), m_pProjView(pProjView), m_pProjDoc(pProjView->GetDocument()), + m_iImageNX(iImageNX), m_iImageNY(iImageNY), + m_pszFilterName(pszFilterName), m_dFilterParam(dFilterParam), m_pszFilterMethod(pszFilterMethod), + m_iZeropad(iZeropad), m_pszFilterGenerationName(pszFilterGenerationName), m_pszInterpName(pszInterpName), +- m_iInterpParam(iInterpParam), m_pszBackprojectName(pszBackprojectName), m_pszLabel(pszLabel), ++ m_iInterpParam(iInterpParam), m_pszBackprojectName(pszBackprojectName), m_strLabel(pszLabel), + m_pReconROI(pROI) + { + m_vecpChildImageFile.reserve (getNumWorkers()); +@@ -156,11 +158,11 @@ + + ImageFile* pImageFile = getImageFile(); + pImageFile->labelAdd (m_pProj->getLabel()); +- pImageFile->labelAdd (m_pszLabel, getTimerEnd()); ++ pImageFile->labelAdd (m_strLabel.mb_str(wxConvUTF8), getTimerEnd()); + + wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); +- wxString msg (m_pszLabel); +- msg += "\n"; ++ wxString msg (m_strLabel); ++ msg += _T("\n"); + eventLog.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event + +@@ -225,12 +227,12 @@ + m_iInterpParam, m_pszBackprojectName, Trace::TRACE_NONE, m_pReconROI, false); + + bool bFail = pReconstructor->fail(); +- std::string failMsg; ++ wxString failMsg; + if (bFail) { +- failMsg = "Unable to make reconstructor: "; +- failMsg += pReconstructor->failMessage().c_str(); ++ failMsg = _T("Unable to make reconstructor: "); ++ failMsg += wxConvUTF8.cMB2WX(pReconstructor->failMessage().c_str()); + wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); +- event.SetString( failMsg.c_str() ); ++ event.SetString( failMsg ); + wxPostEvent( theApp->getMainFrame(), event ); + } + else +@@ -241,7 +243,7 @@ + #ifdef DEBUG + if (theApp->getVerboseLogging()) { + wxString msg; +- msg.Printf("Worker thread: Received destroy message at work unit #%d\n", iUnit); ++ msg.Printf(_T("Worker thread: Received destroy message at work unit #%d\n"), iUnit); + wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); + event.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), event ); +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadrecon.h ctsim-wx2.8/src/threadrecon.h +--- ctsim/src/threadrecon.h 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/threadrecon.h 2008-07-21 10:08:10.956319178 -0600 +@@ -59,14 +59,14 @@ + const std::string m_strInterpName; + const int m_iInterpParam; + const std::string m_strBackprojectName; +- const std::string m_strLabel; ++ const wxString m_strLabel; + ReconstructionROI m_reconROI; + const bool m_bRebinToParallel; + + public: + ReconstructorSupervisorThread(ProjectionFileView* pProjView, int iNX, int iNY, const char* pszFilterName, + double dFilterParam, const char* pszFilterMethod, int iZeropad, const char* pszFilterGenerationName, +- const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, const char* const pszLabel, ++ const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, wxChar const* pszLabel, + ReconstructionROI* pROI, bool bRebinToParallel); + + virtual wxThread::ExitCode Entry(); +@@ -95,14 +95,14 @@ + const char* const m_pszInterpName; + const int m_iInterpParam; + const char* const m_pszBackprojectName; +- const char* const m_pszLabel; ++ const wxString m_strLabel; + ReconstructionROI* m_pReconROI; + + public: + ReconstructorSupervisor (SupervisorThread* pMyThread, Projections* pProj, ProjectionFileView* pProjView, + int iNX, int iNY, const char* pszFilterName, double dFilterParam, const char* pszFilterMethod, int iZeropad, + const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam, +- const char* pszBackprojectName, const char* const pszLabel, ReconstructionROI* pReconROI); ++ const char* pszBackprojectName, wxChar const* pszLabel, ReconstructionROI* pReconROI); + + virtual BackgroundWorkerThread* createWorker (int iThread, int iStartUnit, int iNumUnits); + +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/tips.cpp ctsim-wx2.8/src/tips.cpp +--- ctsim/src/tips.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/tips.cpp 2008-07-21 10:08:10.964319669 -0600 +@@ -83,7 +83,7 @@ + size_t iThisTip = m_iCurrentTip; + ++m_iCurrentTip; + +- return wxString (s_aszTips[iThisTip]); ++ return wxString (wxConvUTF8.cMB2WX(s_aszTips[iThisTip])); + } + + size_t +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/views.cpp ctsim-wx2.8/src/views.cpp +--- ctsim/src/views.cpp 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/views.cpp 2008-07-29 20:38:45.351315859 -0600 +@@ -133,20 +133,21 @@ + const int yPt = ny - 1 - pt.y; + if (event.RightIsDown()) { + if (pt.x >= 0 && pt.x < nx && pt.y >= 0 && pt.y < ny) { +- std::ostringstream os; +- os << "Image value (" << pt.x << "," << yPt << ") = " << v[pt.x][yPt]; ++ wxString os; ++ os << _T("Image value (") << pt.x << _T(",") << yPt << _T(") = ") ++ << v[pt.x][yPt]; + if (rIF.isComplex()) { + double dImag = rIF.getImaginaryArray()[pt.x][yPt]; + if (dImag < 0) +- os << " - " << -dImag; ++ os << _T(" - ") << -dImag; + else +- os << " + " << dImag; +- os << "i\n"; ++ os << _T(" + ") << dImag; ++ os << _T("i\n"); + } else +- os << "\n"; +- *theApp->getLog() << os.str().c_str(); ++ os << _T("\n"); ++ *theApp->getLog() << os; + } else +- *theApp->getLog() << "Mouse out of image range (" << pt.x << "," << yPt << ")\n"; ++ *theApp->getLog() << _T("Mouse out of image range (") << pt.x << _T(",") << yPt << _T(")\n"); + } + else if (event.LeftIsDown() || event.LeftUp() || event.RightUp()) { + if (pt.x >= 0 && pt.x < nx && pt.y >= 0 && pt.y < ny) { +@@ -166,12 +167,12 @@ + pMenu->Enable (IFMENU_PLOT_FFT_COL, true); + } + } else +- *theApp->getLog() << "Mouse out of image range (" << pt.x << "," << yPt << ")\n"; ++ *theApp->getLog() << _T("Mouse out of image range (") << pt.x << _T(",") << yPt << _T(")\n"); + } + if (event.LeftUp()) { +- std::ostringstream os; +- os << "Selected column " << pt.x << " , row " << yPt << "\n"; +- *theApp->getLog() << os.str().c_str(); ++ wxString os; ++ os << _T("Selected column ") << pt.x << _T(" , row ") << yPt << _T("\n"); ++ *theApp->getLog() << os; + } + } + +@@ -276,7 +277,7 @@ + ImageFileView::~ImageFileView() + { + GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu); +- GetDocumentManager()->ActivateView(this, FALSE, TRUE); ++ GetDocumentManager()->ActivateView(this, FALSE); + } + + +@@ -285,9 +286,9 @@ + { + const ImageFile& rIF = GetDocument()->getImageFile(); + if (rIF.nx() == 0 || rIF.ny() == 0) +- *theApp->getLog() << "Properties: empty imagefile\n"; ++ *theApp->getLog() << _T("Properties: empty imagefile\n"); + else { +- const std::string rFilename = m_pFrame->GetTitle().c_str(); ++ const std::string rFilename (m_pFrame->GetTitle().mb_str(wxConvUTF8)); + std::ostringstream os; + double min, max, mean, mode, median, stddev; + rIF.statistics (rIF.getArray(), min, max, mean, mode, median, stddev); +@@ -306,8 +307,8 @@ + if (rIF.nLabels() > 0) { + rIF.printLabelsBrief (os); + } +- *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n"; +- wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Imagefile Properties", wxOK | wxICON_INFORMATION); ++ *theApp->getLog() << _T(">>>>\n") << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("<<<<\n"); ++ wxMessageDialog dialogMsg (getFrameForChild(), wxConvUTF8.cMB2WX(os.str().c_str()), _T("Imagefile Properties"), wxOK | wxICON_INFORMATION); + dialogMsg.ShowModal(); + } + GetDocument()->Activate(); +@@ -349,7 +350,7 @@ + if (m_bMaxSpecified) + max = m_dMaxPixel; + +- DialogGetMinMax dialogMinMax (getFrameForChild(), "Set Image Minimum & Maximum", min, max); ++ DialogGetMinMax dialogMinMax (getFrameForChild(), _T("Set Image Minimum & Maximum"), min, max); + int retVal = dialogMinMax.ShowModal(); + if (retVal == wxID_OK) { + m_bMinSpecified = true; +@@ -381,9 +382,9 @@ + theApp->getCompatibleImages (GetDocument(), vecIF); + + if (vecIF.size() == 0) { +- wxMessageBox("There are no compatible image files open for comparision", "No comparison images"); ++ wxMessageBox(_T("There are no compatible image files open for comparision"), _T("No comparison images")); + } else { +- DialogGetComparisonImage dialogGetCompare(getFrameForChild(), "Get Comparison Image", vecIF, true); ++ DialogGetComparisonImage dialogGetCompare(getFrameForChild(), _T("Get Comparison Image"), vecIF, true); + + if (dialogGetCompare.ShowModal() == wxID_OK) { + const ImageFile& rIF = GetDocument()->getImageFile(); +@@ -392,19 +393,19 @@ + std::ostringstream os; + double min, max, mean, mode, median, stddev; + rIF.statistics (min, max, mean, mode, median, stddev); +- os << GetFrame()->GetTitle().c_str() << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n"; ++ os << m_pFrame->GetTitle().mb_str(wxConvUTF8) << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n"; + rCompareIF.statistics (min, max, mean, mode, median, stddev); +- os << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n"; ++ os << dynamic_cast(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8) << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n"; + double d, r, e; + rIF.comparativeStatistics (rCompareIF, d, r, e); + os << "Comparative Statistics: d=" << d << ", r=" << r << ", e=" << e << "\n"; +- *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n"; ++ *theApp->getLog() << _T(">>>>\n") << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("<<<<\n"); + if (dialogGetCompare.getMakeDifferenceImage()) { + ImageFile* pDifferenceImage = new ImageFile; + + pDifferenceImage->setArraySize (rIF.nx(), rIF.ny()); + if (! rIF.subtractImages (rCompareIF, *pDifferenceImage)) { +- *theApp->getLog() << "Unable to subtract images\n"; ++ *theApp->getLog() << _T("Unable to subtract images\n"); + delete pDifferenceImage; + return; + } +@@ -415,13 +416,13 @@ + } + pDifferenceDoc->setImageFile (pDifferenceImage); + +- wxString s = GetFrame()->GetTitle() + ": "; +- pDifferenceImage->labelsCopy (rIF, s.c_str()); +- s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle() + ": "; +- pDifferenceImage->labelsCopy (rCompareIF, s.c_str()); ++ wxString s = m_pFrame->GetTitle() + _T(": "); ++ pDifferenceImage->labelsCopy (rIF, s.mb_str(wxConvUTF8)); ++ s = dynamic_cast(pCompareDoc->GetFirstView()->GetFrame())->GetTitle() + _T(": "); ++ pDifferenceImage->labelsCopy (rCompareIF, s.mb_str(wxConvUTF8)); + std::ostringstream osLabel; +- osLabel << "Compare image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() +- << " and " << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": " ++ osLabel << "Compare image " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() ++ << " and " << dynamic_cast(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().c_str() << ": " + << os.str().c_str(); + pDifferenceImage->labelAdd (os.str().c_str()); + if (theApp->getAskDeleteNewDocs()) +@@ -431,7 +432,7 @@ + pDifferenceDoc->getView()->setInitialClientSize(); + pDifferenceDoc->Activate(); + } +- wxMessageBox(os.str().c_str(), "Image Comparison"); ++ wxMessageBox(wxConvUTF8.cMB2WX(os.str().c_str()), _T("Image Comparison")); + } + } + } +@@ -508,9 +509,9 @@ + theApp->getCompatibleImages (GetDocument(), vecIF); + + if (vecIF.size() == 0) { +- wxMessageBox ("There are no compatible image files open for comparision", "No comparison images"); ++ wxMessageBox (_T("There are no compatible image files open for comparision"), _T("No comparison images")); + } else { +- DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Add", vecIF, false); ++ DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Image to Add"), vecIF, false); + + if (dialogGetCompare.ShowModal() == wxID_OK) { + ImageFile& rIF = GetDocument()->getImageFile(); +@@ -525,14 +526,14 @@ + newImage.setArraySize (rIF.nx(), rIF.ny()); + rIF.addImages (rRHSIF, newImage); + std::ostringstream os; +- os << "Add image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " +- << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str(); +- wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": "; +- newImage.labelsCopy (rIF, s.c_str()); +- s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": "; +- newImage.labelsCopy (rRHSIF, s.c_str()); ++ os << "Add image " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() << " and " ++ << dynamic_cast(pRHSDoc->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ wxString s = dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle() + _T(": "); ++ newImage.labelsCopy (rIF, s.mb_str(wxConvUTF8)); ++ s = dynamic_cast(pRHSDoc->GetFirstView()->GetFrame())->GetTitle() + _T(": "); ++ newImage.labelsCopy (rRHSIF, s.mb_str(wxConvUTF8)); + newImage.labelAdd (os.str().c_str()); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + if (theApp->getAskDeleteNewDocs()) + pNewDoc->Modify (true); + OnUpdate(this, NULL); +@@ -550,9 +551,9 @@ + theApp->getCompatibleImages (GetDocument(), vecIF); + + if (vecIF.size() == 0) { +- wxMessageBox ("There are no compatible image files open for comparision", "No comparison images"); ++ wxMessageBox (_T("There are no compatible image files open for comparision"), _T("No comparison images")); + } else { +- DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Subtract", vecIF, false); ++ DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Image to Subtract"), vecIF, false); + + if (dialogGetCompare.ShowModal() == wxID_OK) { + ImageFile& rIF = GetDocument()->getImageFile(); +@@ -567,14 +568,14 @@ + newImage.setArraySize (rIF.nx(), rIF.ny()); + rIF.subtractImages (rRHSIF, newImage); + std::ostringstream os; +- os << "Subtract image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " +- << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str(); +- wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": "; +- newImage.labelsCopy (rIF, s.c_str()); +- s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": "; +- newImage.labelsCopy (rRHSIF, s.c_str()); ++ os << "Subtract image " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() << " and " ++ << dynamic_cast(pRHSDoc->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ wxString s = dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle() + _T(": "); ++ newImage.labelsCopy (rIF, s.mb_str(wxConvUTF8)); ++ s = dynamic_cast(pRHSDoc->GetFirstView()->GetFrame())->GetTitle() + _T(": "); ++ newImage.labelsCopy (rRHSIF, s.mb_str(wxConvUTF8)); + newImage.labelAdd (os.str().c_str()); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + if (theApp->getAskDeleteNewDocs()) + pNewDoc->Modify (true); + OnUpdate(this, NULL); +@@ -592,9 +593,9 @@ + theApp->getCompatibleImages (GetDocument(), vecIF); + + if (vecIF.size() == 0) { +- wxMessageBox ("There are no compatible image files open for comparision", "No comparison images"); ++ wxMessageBox (_T("There are no compatible image files open for comparision"), _T("No comparison images")); + } else { +- DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Multiply", vecIF, false); ++ DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Image to Multiply"), vecIF, false); + + if (dialogGetCompare.ShowModal() == wxID_OK) { + ImageFile& rIF = GetDocument()->getImageFile(); +@@ -609,14 +610,14 @@ + newImage.setArraySize (rIF.nx(), rIF.ny()); + rIF.multiplyImages (rRHSIF, newImage); + std::ostringstream os; +- os << "Multiply image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " +- << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str(); +- wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": "; +- newImage.labelsCopy (rIF, s.c_str()); +- s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": "; +- newImage.labelsCopy (rRHSIF, s.c_str()); ++ os << "Multiply image " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() << " and " ++ << dynamic_cast(pRHSDoc->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ wxString s = dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle() + _T(": "); ++ newImage.labelsCopy (rIF, s.mb_str(wxConvUTF8)); ++ s = dynamic_cast(pRHSDoc->GetFirstView()->GetFrame())->GetTitle() + _T(": "); ++ newImage.labelsCopy (rRHSIF, s.mb_str(wxConvUTF8)); + newImage.labelAdd (os.str().c_str()); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + if (theApp->getAskDeleteNewDocs()) + pNewDoc->Modify (true); + OnUpdate(this, NULL); +@@ -634,9 +635,9 @@ + theApp->getCompatibleImages (GetDocument(), vecIF); + + if (vecIF.size() == 0) { +- wxMessageBox ("There are no compatible image files open for comparision", "No comparison images"); ++ wxMessageBox (_T("There are no compatible image files open for comparision"), _T("No comparison images")); + } else { +- DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Divide", vecIF, false); ++ DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Image to Divide"), vecIF, false); + + if (dialogGetCompare.ShowModal() == wxID_OK) { + ImageFile& rIF = GetDocument()->getImageFile(); +@@ -651,14 +652,14 @@ + newImage.setArraySize (rIF.nx(), rIF.ny()); + rIF.divideImages (rRHSIF, newImage); + std::ostringstream os; +- os << "Divide image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " by " +- << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str(); +- wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": "; +- newImage.labelsCopy (rIF, s.c_str()); +- s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": "; +- newImage.labelsCopy (rRHSIF, s.c_str()); ++ os << "Divide image " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() << " by " ++ << dynamic_cast(pRHSDoc->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ wxString s = dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle() + _T(": "); ++ newImage.labelsCopy (rIF, s.mb_str(wxConvUTF8)); ++ s = dynamic_cast(pRHSDoc->GetFirstView()->GetFrame())->GetTitle() + _T(": "); ++ newImage.labelsCopy (rRHSIF, s.mb_str(wxConvUTF8)); + newImage.labelAdd (os.str().c_str()); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + if (theApp->getAskDeleteNewDocs()) + pNewDoc->Modify (true); + OnUpdate(this, NULL); +@@ -766,7 +767,7 @@ + ImageFileView::OnFourier (wxCommandEvent& event) + { + ImageFile& rIF = GetDocument()->getImageFile(); +- wxProgressDialog dlgProgress (wxString("Fourier"), wxString("Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); ++ wxProgressDialog dlgProgress (_T("Fourier"), _T("Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); + rIF.fourier (rIF); + rIF.labelAdd ("Fourier Image"); + m_bMinSpecified = false; +@@ -782,7 +783,7 @@ + ImageFileView::OnInverseFourier (wxCommandEvent& event) + { + ImageFile& rIF = GetDocument()->getImageFile(); +- wxProgressDialog dlgProgress (wxString("Inverse Fourier"), wxString("Inverse Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); ++ wxProgressDialog dlgProgress (_T("Inverse Fourier"), _T("Inverse Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); + rIF.inverseFourier (rIF); + rIF.labelAdd ("Inverse Fourier Image"); + m_bMinSpecified = false; +@@ -897,7 +898,7 @@ + ImageFileCanvas* pCanvas = new ImageFileCanvas (this, parent, wxPoint(-1,-1), + wxSize(-1,-1), 0); + pCanvas->SetBackgroundColour(*wxWHITE); +- pCanvas->Clear(); ++ pCanvas->ClearBackground(); + + return pCanvas; + } +@@ -910,97 +911,97 @@ + ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view) + { + #if CTSIM_MDI +- wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "ImageFile Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); ++ wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("ImageFile Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); + #else +- wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "ImageFile Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); ++ wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, _T("ImageFile Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); + #endif + theApp->setIconForFrame (subframe); + + m_pFileMenu = new wxMenu; +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P"); +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F"); +- m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O"); +- m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S"); +- m_pFileMenu->Append(wxID_SAVEAS, "Save &As..."); +- m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W"); +- m_pFileMenu->Append(wxID_REVERT, "Re&vert"); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P")); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F")); ++ m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O")); ++ m_pFileMenu->Append(wxID_SAVE, _T("&Save\tCtrl-S")); ++ m_pFileMenu->Append(wxID_SAVEAS, _T("Save &As...")); ++ m_pFileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl-W")); ++ m_pFileMenu->Append(wxID_REVERT, _T("Re&vert")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(IFMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I"); +- m_pFileMenu->Append(IFMENU_FILE_EXPORT, "Expor&t..."); ++ m_pFileMenu->Append(IFMENU_FILE_PROPERTIES, _T("P&roperties\tCtrl-I")); ++ m_pFileMenu->Append(IFMENU_FILE_EXPORT, _T("Expor&t...")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(wxID_PRINT, "&Print..."); +- m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup..."); +- m_pFileMenu->Append(wxID_PREVIEW, "Print Preview"); ++ m_pFileMenu->Append(wxID_PRINT, _T("&Print...")); ++ m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup...")); ++ m_pFileMenu->Append(wxID_PREVIEW, _T("Print Preview")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M"); ++ m_pFileMenu->Append(MAINMENU_IMPORT, _T("&Import...\tCtrl-M")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces..."); +- m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit"); ++ m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces...")); ++ m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit")); + GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu); + GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu); + + wxMenu* edit_menu = new wxMenu; +- edit_menu->Append(IFMENU_EDIT_COPY, "Copy\tCtrl-C"); +- edit_menu->Append(IFMENU_EDIT_CUT, "Cut\tCtrl-X"); +- edit_menu->Append(IFMENU_EDIT_PASTE, "Paste\tCtrl-V"); ++ edit_menu->Append(IFMENU_EDIT_COPY, _T("Copy\tCtrl-C")); ++ edit_menu->Append(IFMENU_EDIT_CUT, _T("Cut\tCtrl-X")); ++ edit_menu->Append(IFMENU_EDIT_PASTE, _T("Paste\tCtrl-V")); + + wxMenu *view_menu = new wxMenu; +- view_menu->Append(IFMENU_VIEW_SCALE_MINMAX, "Display Scale S&et...\tCtrl-E"); +- view_menu->Append(IFMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...\tCtrl-A"); +- view_menu->Append(IFMENU_VIEW_SCALE_FULL, "Display F&ull Scale\tCtrl-U"); ++ view_menu->Append(IFMENU_VIEW_SCALE_MINMAX, _T("Display Scale S&et...\tCtrl-E")); ++ view_menu->Append(IFMENU_VIEW_SCALE_AUTO, _T("Display Scale &Auto...\tCtrl-A")); ++ view_menu->Append(IFMENU_VIEW_SCALE_FULL, _T("Display F&ull Scale\tCtrl-U")); + + m_pFilterMenu = new wxMenu; +- m_pFilterMenu->Append (IFMENU_FILTER_INVERTVALUES, "In&vert Values"); +- m_pFilterMenu->Append (IFMENU_FILTER_SQUARE, "&Square"); +- m_pFilterMenu->Append (IFMENU_FILTER_SQRT, "Square &Root"); +- m_pFilterMenu->Append (IFMENU_FILTER_LOG, "&Log"); +- m_pFilterMenu->Append (IFMENU_FILTER_EXP, "E&xp"); ++ m_pFilterMenu->Append (IFMENU_FILTER_INVERTVALUES, _T("In&vert Values")); ++ m_pFilterMenu->Append (IFMENU_FILTER_SQUARE, _T("&Square")); ++ m_pFilterMenu->Append (IFMENU_FILTER_SQRT, _T("Square &Root")); ++ m_pFilterMenu->Append (IFMENU_FILTER_LOG, _T("&Log")); ++ m_pFilterMenu->Append (IFMENU_FILTER_EXP, _T("E&xp")); + m_pFilterMenu->AppendSeparator(); + #ifdef HAVE_FFT +- m_pFilterMenu->Append (IFMENU_FILTER_FFT, "2-D &FFT\tCtrl-2"); +- m_pFilterMenu->Append (IFMENU_FILTER_IFFT, "2-D &IFFT\tAlt-2"); +- m_pFilterMenu->Append (IFMENU_FILTER_FFT_ROWS, "FFT Rows"); +- m_pFilterMenu->Append (IFMENU_FILTER_IFFT_ROWS, "IFFT Rows"); +- m_pFilterMenu->Append (IFMENU_FILTER_FFT_COLS, "FFT Columns"); +- m_pFilterMenu->Append (IFMENU_FILTER_IFFT_COLS, "IFFT Columns"); +- m_pFilterMenu->Append (IFMENU_FILTER_FOURIER, "2-D F&ourier"); +- m_pFilterMenu->Append (IFMENU_FILTER_INVERSE_FOURIER, "2-D Inverse Fo&urier"); ++ m_pFilterMenu->Append (IFMENU_FILTER_FFT, _T("2-D &FFT\tCtrl-2")); ++ m_pFilterMenu->Append (IFMENU_FILTER_IFFT, _T("2-D &IFFT\tAlt-2")); ++ m_pFilterMenu->Append (IFMENU_FILTER_FFT_ROWS, _T("FFT Rows")); ++ m_pFilterMenu->Append (IFMENU_FILTER_IFFT_ROWS, _T("IFFT Rows")); ++ m_pFilterMenu->Append (IFMENU_FILTER_FFT_COLS, _T("FFT Columns")); ++ m_pFilterMenu->Append (IFMENU_FILTER_IFFT_COLS, _T("IFFT Columns")); ++ m_pFilterMenu->Append (IFMENU_FILTER_FOURIER, _T("2-D F&ourier")); ++ m_pFilterMenu->Append (IFMENU_FILTER_INVERSE_FOURIER, _T("2-D Inverse Fo&urier")); + #else +- m_pFilterMenu->Append (IFMENU_FILTER_FOURIER, "&Fourier"); +- m_pFilterMenu->Append (IFMENU_FILTER_INVERSE_FOURIER, "&Inverse Fourier"); ++ m_pFilterMenu->Append (IFMENU_FILTER_FOURIER, _T("&Fourier")); ++ m_pFilterMenu->Append (IFMENU_FILTER_INVERSE_FOURIER, _T("&Inverse Fourier")); + #endif +- m_pFilterMenu->Append (IFMENU_FILTER_SHUFFLEFOURIERTONATURALORDER, "Shuffl&e Fourier to Natural Order"); +- m_pFilterMenu->Append (IFMENU_FILTER_SHUFFLENATURALTOFOURIERORDER, "Shuffle &Natural to Fourier Order"); ++ m_pFilterMenu->Append (IFMENU_FILTER_SHUFFLEFOURIERTONATURALORDER, _T("Shuffl&e Fourier to Natural Order")); ++ m_pFilterMenu->Append (IFMENU_FILTER_SHUFFLENATURALTOFOURIERORDER, _T("Shuffle &Natural to Fourier Order")); + m_pFilterMenu->AppendSeparator(); +- m_pFilterMenu->Append (IFMENU_FILTER_MAGNITUDE, "&Magnitude"); +- m_pFilterMenu->Append (IFMENU_FILTER_PHASE, "&Phase"); +- m_pFilterMenu->Append (IFMENU_FILTER_REAL, "Re&al"); +- m_pFilterMenu->Append (IFMENU_FILTER_IMAGINARY, "Ima&ginary"); ++ m_pFilterMenu->Append (IFMENU_FILTER_MAGNITUDE, _T("&Magnitude")); ++ m_pFilterMenu->Append (IFMENU_FILTER_PHASE, _T("&Phase")); ++ m_pFilterMenu->Append (IFMENU_FILTER_REAL, _T("Re&al")); ++ m_pFilterMenu->Append (IFMENU_FILTER_IMAGINARY, _T("Ima&ginary")); + + wxMenu* image_menu = new wxMenu; +- image_menu->Append (IFMENU_IMAGE_ADD, "&Add..."); +- image_menu->Append (IFMENU_IMAGE_SUBTRACT, "&Subtract..."); +- image_menu->Append (IFMENU_IMAGE_MULTIPLY, "&Multiply..."); +- image_menu->Append (IFMENU_IMAGE_DIVIDE, "&Divide..."); ++ image_menu->Append (IFMENU_IMAGE_ADD, _T("&Add...")); ++ image_menu->Append (IFMENU_IMAGE_SUBTRACT, _T("&Subtract...")); ++ image_menu->Append (IFMENU_IMAGE_MULTIPLY, _T("&Multiply...")); ++ image_menu->Append (IFMENU_IMAGE_DIVIDE, _T("&Divide...")); + image_menu->AppendSeparator(); +- image_menu->Append (IFMENU_IMAGE_SCALESIZE, "S&cale Size..."); ++ image_menu->Append (IFMENU_IMAGE_SCALESIZE, _T("S&cale Size...")); + #if wxUSE_GLCANVAS +- image_menu->Append (IFMENU_IMAGE_CONVERT3D, "Convert &3-D\tCtrl-3"); ++ image_menu->Append (IFMENU_IMAGE_CONVERT3D, _T("Convert &3-D\tCtrl-3")); + #endif + + m_pMenuAnalyze = new wxMenu; +- m_pMenuAnalyze->Append (IFMENU_PLOT_ROW, "Plot &Row"); +- m_pMenuAnalyze->Append (IFMENU_PLOT_COL, "Plot &Column"); +- m_pMenuAnalyze->Append (IFMENU_PLOT_HISTOGRAM, "Plot &Histogram"); ++ m_pMenuAnalyze->Append (IFMENU_PLOT_ROW, _T("Plot &Row")); ++ m_pMenuAnalyze->Append (IFMENU_PLOT_COL, _T("Plot &Column")); ++ m_pMenuAnalyze->Append (IFMENU_PLOT_HISTOGRAM, _T("Plot &Histogram")); + m_pMenuAnalyze->AppendSeparator(); +- m_pMenuAnalyze->Append (IFMENU_PLOT_FFT_ROW, "P&lot FFT Row"); +- m_pMenuAnalyze->Append (IFMENU_PLOT_FFT_COL, "Plo&t FFT Column"); ++ m_pMenuAnalyze->Append (IFMENU_PLOT_FFT_ROW, _T("P&lot FFT Row")); ++ m_pMenuAnalyze->Append (IFMENU_PLOT_FFT_COL, _T("Plo&t FFT Column")); + m_pMenuAnalyze->AppendSeparator(); +- m_pMenuAnalyze->Append (IFMENU_COMPARE_IMAGES, "Compare &Images..."); +- m_pMenuAnalyze->Append (IFMENU_COMPARE_ROW, "Compare Ro&w"); +- m_pMenuAnalyze->Append (IFMENU_COMPARE_COL, "Compare Colu&mn"); ++ m_pMenuAnalyze->Append (IFMENU_COMPARE_IMAGES, _T("Compare &Images...")); ++ m_pMenuAnalyze->Append (IFMENU_COMPARE_ROW, _T("Compare Ro&w")); ++ m_pMenuAnalyze->Append (IFMENU_COMPARE_COL, _T("Compare Colu&mn")); + m_pMenuAnalyze->Enable (IFMENU_PLOT_ROW, false); + m_pMenuAnalyze->Enable (IFMENU_PLOT_COL, false); + m_pMenuAnalyze->Enable (IFMENU_COMPARE_ROW, false); +@@ -1009,20 +1010,20 @@ + m_pMenuAnalyze->Enable (IFMENU_PLOT_FFT_COL, false); + + wxMenu *help_menu = new wxMenu; +- help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); +- help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); +- help_menu->Append (IDH_QUICKSTART, "&Quick Start"); +- help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); ++ help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1")); ++ help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips")); ++ help_menu->Append (IDH_QUICKSTART, _T("&Quick Start")); ++ help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About")); + + wxMenuBar *menu_bar = new wxMenuBar; + +- menu_bar->Append(m_pFileMenu, "&File"); +- menu_bar->Append(edit_menu, "&Edit"); +- menu_bar->Append(view_menu, "&View"); +- menu_bar->Append(image_menu, "&Image"); +- menu_bar->Append(m_pFilterMenu, "Fi<er"); +- menu_bar->Append(m_pMenuAnalyze, "&Analyze"); +- menu_bar->Append(help_menu, "&Help"); ++ menu_bar->Append(m_pFileMenu, _T("&File")); ++ menu_bar->Append(edit_menu, _T("&Edit")); ++ menu_bar->Append(view_menu, _T("&View")); ++ menu_bar->Append(image_menu, _T("&Image")); ++ menu_bar->Append(m_pFilterMenu, _T("Fi<er")); ++ menu_bar->Append(m_pMenuAnalyze, _T("&Analyze")); ++ menu_bar->Append(help_menu, _T("&Help")); + + subframe->SetMenuBar(menu_bar); + +@@ -1064,7 +1065,7 @@ + m_pCanvas = CreateCanvas (m_pFrame); + m_pFrame->SetClientSize (m_pCanvas->GetBestSize()); + m_pCanvas->SetClientSize (m_pCanvas->GetBestSize()); +- m_pFrame->SetTitle("ImageFileView"); ++ m_pFrame->SetTitle(_T("ImageFileView")); + + m_pFrame->Show(true); + Activate(true); +@@ -1089,7 +1090,7 @@ + { + if (m_pBitmap && m_pBitmap->Ok()) { + #ifdef DEBUG +- *theApp->getLog() << "Drawing bitmap\n"; ++ *theApp->getLog() << _T("Drawing bitmap\n"); + #endif + dc->DrawBitmap(*m_pBitmap, 0, 0, false); + } +@@ -1147,7 +1148,7 @@ + m_pBitmap = NULL; + } + #ifdef DEBUG +- *theApp->getLog() << "Making new bitmap\n"; ++ *theApp->getLog() << _T("Making new bitmap\n"); + #endif + m_pBitmap = new wxBitmap (image); + delete imageData; +@@ -1281,41 +1282,46 @@ + + DialogExportParameters dialogExport (getFrameForChild(), m_iDefaultExportFormatID); + if (dialogExport.ShowModal() == wxID_OK) { +- wxString strFormatName (dialogExport.getFormatName ()); +- m_iDefaultExportFormatID = ImageFile::convertExportFormatNameToID (strFormatName.c_str()); ++ wxString strFormatName (dialogExport.getFormatName (), wxConvUTF8); ++ m_iDefaultExportFormatID = ImageFile::convertExportFormatNameToID (strFormatName.mb_str(wxConvUTF8)); + + wxString strExt; + wxString strWildcard; + if (m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_PGM || m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_PGMASCII) { +- strExt = ".pgm"; +- strWildcard = "PGM Files (*.pgm)|*.pgm"; ++ strExt = _T(".pgm"); ++ strWildcard = _T("PGM Files (*.pgm)|*.pgm"); + } + #ifdef HAVE_PNG + else if (m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_PNG || m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_PNG16) { +- strExt = ".png"; +- strWildcard = "PNG Files (*.png)|*.png"; ++ strExt = _T(".png"); ++ strWildcard = _T("PNG Files (*.png)|*.png"); + } + #endif + #ifdef HAVE_CTN_DICOM + else if (m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_DICOM) { +- strExt = ""; +- strWildcard = "DICOM Files (*.*)|*.*"; ++ strExt = _T(""); ++ strWildcard = _T("DICOM Files (*.*)|*.*"); + } + #endif + else if (m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_TEXT) { +- strExt = ".txt"; +- strWildcard = "Text (*.txt)|*.txt"; ++ strExt = _T(".txt"); ++ strWildcard = _T("Text (*.txt)|*.txt"); + } + else { +- strExt = ""; +- strWildcard = "Miscellaneous (*.*)|*.*"; ++ strExt = _T(""); ++ strWildcard = _T("Miscellaneous (*.*)|*.*"); + } + +- const wxString& strFilename = wxFileSelector (wxString("Export Filename"), wxString(""), +- wxString(""), strExt, strWildcard, wxOVERWRITE_PROMPT | wxHIDE_READONLY | wxSAVE); ++#if WXWIN_COMPATIBILITY_2_4 ++ const wxString& strFilename = wxFileSelector (_T("Export Filename"), _T(""), ++ _T(""), strExt, strWildcard, wxOVERWRITE_PROMPT | wxHIDE_READONLY | wxSAVE); ++#else ++ const wxString& strFilename = wxFileSelector (_T("Export Filename"), _T(""), ++ _T(""), strExt, strWildcard, wxOVERWRITE_PROMPT | wxSAVE); ++#endif + if (strFilename) { +- rIF.exportImage (strFormatName.c_str(), strFilename.c_str(), 1, 1, m_dMinPixel, m_dMaxPixel); +- *theApp->getLog() << "Exported file " << strFilename << "\n"; ++ rIF.exportImage (strFormatName.mb_str(wxConvUTF8), strFilename.mb_str(wxConvUTF8), 1, 1, m_dMinPixel, m_dMaxPixel); ++ *theApp->getLog() << _T("Exported file ") << strFilename << _T("\n"); + } + } + } +@@ -1328,7 +1334,7 @@ + unsigned int iOldNX = rIF.nx(); + unsigned int iOldNY = rIF.ny(); + +- DialogGetXYSize dialogGetXYSize (getFrameForChild(), "Set New X & Y Dimensions", iOldNX, iOldNY); ++ DialogGetXYSize dialogGetXYSize (getFrameForChild(), _T("Set New X & Y Dimensions"), iOldNX, iOldNY); + if (dialogGetXYSize.ShowModal() == wxID_OK) { + unsigned int iNewNX = dialogGetXYSize.getXSize(); + unsigned int iNewNY = dialogGetXYSize.getYSize(); +@@ -1344,7 +1350,7 @@ + rScaledIF.labelsCopy (rIF); + rScaledIF.labelAdd (os.str().c_str()); + rIF.scaleImage (rScaledIF); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + if (theApp->getAskDeleteNewDocs()) + pScaledDoc->Modify (true); + OnUpdate(this, NULL); +@@ -1376,7 +1382,7 @@ + { + int xCursor, yCursor; + if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) { +- wxMessageBox ("No row selected. Please use left mouse button on image to select column","Error"); ++ wxMessageBox (_T("No row selected. Please use left mouse button on image to select column"),_T("Error")); + return; + } + +@@ -1439,8 +1445,8 @@ + } + for (unsigned int iL = 0; iL < rIF.nLabels(); iL++) + rPlotFile.addDescription (rIF.labelGet(iL).getLabelString().c_str()); +- os << " Plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str(); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ os << " Plot of " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + rPlotFile.addDescription (os.str().c_str()); + } + delete pX; +@@ -1462,7 +1468,7 @@ + { + int xCursor, yCursor; + if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) { +- wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error"); ++ wxMessageBox (_T("No column selected. Please use left mouse button on image to select column"),_T("Error")); + return; + } + +@@ -1525,8 +1531,8 @@ + } + for (unsigned int iL = 0; iL < rIF.nLabels(); iL++) + rPlotFile.addDescription (rIF.labelGet(iL).getLabelString().c_str()); +- os << " Plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str(); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ os << " Plot of " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + rPlotFile.addDescription (os.str().c_str()); + } + delete pX; +@@ -1549,7 +1555,7 @@ + { + int xCursor, yCursor; + if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) { +- wxMessageBox ("No row selected. Please use left mouse button on image to select column","Error"); ++ wxMessageBox (_T("No row selected. Please use left mouse button on image to select column"),_T("Error")); + return; + } + +@@ -1620,8 +1626,8 @@ + rPlotFile.addColumn (3, pYMag); + for (unsigned int iL = 0; iL < rIF.nLabels(); iL++) + rPlotFile.addDescription (rIF.labelGet(iL).getLabelString().c_str()); +- os << " FFT Plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str(); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ os << " FFT Plot of " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + rPlotFile.addDescription (os.str().c_str()); + } + delete pX; +@@ -1643,7 +1649,7 @@ + { + int xCursor, yCursor; + if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) { +- wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error"); ++ wxMessageBox (_T("No column selected. Please use left mouse button on image to select column"),_T("Error")); + return; + } + +@@ -1720,8 +1726,8 @@ + rPlotFile.addColumn (3, pYMag); + for (unsigned int iL = 0; iL < rIF.nLabels(); iL++) + rPlotFile.addDescription (rIF.labelGet(iL).getLabelString().c_str()); +- os << " FFT Plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str(); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ os << " FFT Plot of " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + rPlotFile.addDescription (os.str().c_str()); + } + delete pX; +@@ -1745,17 +1751,17 @@ + { + int xCursor, yCursor; + if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) { +- wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error"); ++ wxMessageBox (_T("No column selected. Please use left mouse button on image to select column"),_T("Error")); + return; + } + + std::vector vecIFDoc; + theApp->getCompatibleImages (GetDocument(), vecIFDoc); + if (vecIFDoc.size() == 0) { +- wxMessageBox ("No compatible images for Column Comparison", "Error"); ++ wxMessageBox (_T("No compatible images for Column Comparison"), _T("Error")); + return; + } +- DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Comparison Image", vecIFDoc, false); ++ DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Comparison Image"), vecIFDoc, false); + + if (dialogGetCompare.ShowModal() == wxID_OK) { + ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument(); +@@ -1803,20 +1809,21 @@ + + unsigned int iL; + for (iL = 0; iL < rIF.nLabels(); iL++) { +- std::string s = GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str(); +- s += ": "; +- s += rIF.labelGet(iL).getLabelString(); +- rPlotFile.addDescription (s.c_str()); ++ std::ostringstream os; ++ os << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8); ++ os << ": " << rIF.labelGet(iL).getLabelString(); ++ rPlotFile.addDescription (os.str().c_str()); + } + for (iL = 0; iL < rCompareIF.nLabels(); iL++) { +- std::string s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str(); +- s += ": "; +- s += rCompareIF.labelGet(iL).getLabelString(); +- rPlotFile.addDescription (s.c_str()); +- } +- os << " Between " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " +- << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str(); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ std::ostringstream os; ++ os << dynamic_cast(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8); ++ os << ": "; ++ os << rCompareIF.labelGet(iL).getLabelString(); ++ rPlotFile.addDescription (os.str().c_str()); ++ } ++ os << " Between " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() << " and " ++ << dynamic_cast(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + rPlotFile.addDescription (os.str().c_str()); + } + delete pX; +@@ -1836,7 +1843,7 @@ + { + int xCursor, yCursor; + if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) { +- wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error"); ++ wxMessageBox (_T("No column selected. Please use left mouse button on image to select column"),_T("Error")); + return; + } + +@@ -1844,11 +1851,11 @@ + theApp->getCompatibleImages (GetDocument(), vecIFDoc); + + if (vecIFDoc.size() == 0) { +- wxMessageBox ("No compatible images for Row Comparison", "Error"); ++ wxMessageBox (_T("No compatible images for Row Comparison"), _T("Error")); + return; + } + +- DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Comparison Image", vecIFDoc, false); ++ DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Comparison Image"), vecIFDoc, false); + + if (dialogGetCompare.ShowModal() == wxID_OK) { + ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument(); +@@ -1895,20 +1902,21 @@ + rPlotFile.addColumn (2, pY2); + unsigned int iL; + for (iL = 0; iL < rIF.nLabels(); iL++) { +- std::string s = GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str(); +- s += ": "; +- s += rIF.labelGet(iL).getLabelString(); +- rPlotFile.addDescription (s.c_str()); ++ std::ostringstream os; ++ os << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8); ++ os << ": "; ++ os << rIF.labelGet(iL).getLabelString(); ++ rPlotFile.addDescription (os.str().c_str()); + } + for (iL = 0; iL < rCompareIF.nLabels(); iL++) { +- std::string s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str(); +- s += ": "; +- s += rCompareIF.labelGet(iL).getLabelString(); +- rPlotFile.addDescription (s.c_str()); +- } +- os << " Between " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " +- << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str(); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ std::ostringstream os; ++ os << dynamic_cast(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8) << ": " ++ << rCompareIF.labelGet(iL).getLabelString(); ++ rPlotFile.addDescription (os.str().c_str()); ++ } ++ os << " Between " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8) << " and " ++ << dynamic_cast(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + rPlotFile.addDescription (os.str().c_str()); + } + delete pX; +@@ -1971,13 +1979,13 @@ + rPlotFile.addColumn (0, pX); + rPlotFile.addColumn (1, pY); + for (unsigned int iL = 0; iL < rIF.nLabels(); iL++) { +- std::string s = GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str(); +- s += ": "; +- s += rIF.labelGet(iL).getLabelString(); +- rPlotFile.addDescription (s.c_str()); ++ std::ostringstream os; ++ os << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8); ++ os << ": " << rIF.labelGet(iL).getLabelString(); ++ rPlotFile.addDescription (os.str().c_str()); + } +- os << " plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str(); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ os << " plot of " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + rPlotFile.addDescription (os.str().c_str()); + delete pX; + delete pY; +@@ -2075,7 +2083,7 @@ + PhantomFileView::~PhantomFileView() + { + GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu); +- GetDocumentManager()->ActivateView(this, FALSE, TRUE); ++ GetDocumentManager()->ActivateView(this, FALSE); + } + + void +@@ -2090,8 +2098,8 @@ + #if DEBUG + rPhantom.print (os); + #endif +- *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n"; +- wxMessageBox (os.str().c_str(), "Phantom Properties"); ++ *theApp->getLog() << _T(">>>>\n") << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("<<<<\n"); ++ wxMessageBox (wxConvUTF8.cMB2WX(os.str().c_str()), _T("Phantom Properties")); + GetDocument()->Activate(); + } + +@@ -2117,22 +2125,22 @@ + m_dDefaultCenterDetectorLength = dialogProjection.getCenterDetectorLengthRatio(); + m_dDefaultViewRatio = dialogProjection.getViewRatio(); + m_dDefaultScanRatio = dialogProjection.getScanRatio(); +- wxString sGeometry = dialogProjection.getGeometry(); +- m_iDefaultGeometry = Scanner::convertGeometryNameToID (sGeometry.c_str()); ++ wxString sGeometry (dialogProjection.getGeometry(), wxConvUTF8); ++ m_iDefaultGeometry = Scanner::convertGeometryNameToID (sGeometry.mb_str(wxConvUTF8)); + double dRotationRadians = m_dDefaultRotation; + m_dDefaultRotation /= TWOPI; // convert back to fraction of a circle + +- if (m_iDefaultNDet <= 0 || m_iDefaultNView <= 0 || sGeometry == "") ++ if (m_iDefaultNDet <= 0 || m_iDefaultNView <= 0 || sGeometry == _T("")) + return; + + const Phantom& rPhantom = GetDocument()->getPhantom(); +- Scanner theScanner (rPhantom, sGeometry.c_str(), m_iDefaultNDet, m_iDefaultNView, m_iDefaultOffsetView, m_iDefaultNSample, ++ Scanner theScanner (rPhantom, sGeometry.mb_str(wxConvUTF8), m_iDefaultNDet, m_iDefaultNView, m_iDefaultOffsetView, m_iDefaultNSample, + dRotationRadians, m_dDefaultFocalLength, m_dDefaultCenterDetectorLength, m_dDefaultViewRatio, m_dDefaultScanRatio); + if (theScanner.fail()) { +- wxString msg = "Failed making scanner\n"; +- msg += theScanner.failMessage().c_str(); +- *theApp->getLog() << msg << "\n"; +- wxMessageBox (msg, "Error"); ++ wxString msg = _T("Failed making scanner\n"); ++ msg += wxConvUTF8.cMB2WX(theScanner.failMessage().c_str()); ++ *theApp->getLog() << msg << _T("\n"); ++ wxMessageBox (msg, _T("Error")); + return; + } + +@@ -2166,15 +2174,17 @@ + ::wxYield(); + while (dialogProjections.isPaused()) { + ::wxYield(); +- ::wxUsleep(50); ++ ::wxMilliSleep(50); + } + } + } else { + #if HAVE_WXTHREADS + if (theApp->getUseBackgroundTasks()) { +- ProjectorSupervisorThread* pProjector = new ProjectorSupervisorThread (this, m_iDefaultNDet, +- m_iDefaultNView, m_iDefaultOffsetView, sGeometry.c_str(), m_iDefaultNSample, dRotationRadians, +- m_dDefaultFocalLength, m_dDefaultCenterDetectorLength, m_dDefaultViewRatio, m_dDefaultScanRatio, os.str().c_str()); ++ ProjectorSupervisorThread* pProjector = new ProjectorSupervisorThread ++ (this, m_iDefaultNDet, m_iDefaultNView, m_iDefaultOffsetView, ++ sGeometry.mb_str(wxConvUTF8), m_iDefaultNSample, dRotationRadians, ++ m_dDefaultFocalLength, m_dDefaultCenterDetectorLength, m_dDefaultViewRatio, ++ m_dDefaultScanRatio, wxConvUTF8.cMB2WX(os.str().c_str())); + if (pProjector->Create() != wxTHREAD_NO_ERROR) { + sys_error (ERR_SEVERE, "Error creating projector thread"); + delete pProjector; +@@ -2188,7 +2198,7 @@ + { + pProj = new Projections; + pProj->initFromScanner (theScanner); +- wxProgressDialog dlgProgress (wxString("Projection"), wxString("Projection Progress"), pProj->nView() + 1, getFrameForChild(), wxPD_CAN_ABORT ); ++ wxProgressDialog dlgProgress (_T("Projection"), _T("Projection Progress"), pProj->nView() + 1, getFrameForChild(), wxPD_CAN_ABORT ); + for (int i = 0; i < pProj->nView(); i++) { + //theScanner.collectProjections (*pProj, rPhantom, i, 1, true, m_iDefaultTrace); + theScanner.collectProjections (*pProj, rPhantom, i, 1, theScanner.offsetView(), true, m_iDefaultTrace); +@@ -2201,7 +2211,7 @@ + } + } + +- *theApp->getLog() << os.str().c_str() << "\n"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + pProj->setRemark (os.str()); + pProj->setCalcTime (timer.timerEnd()); + +@@ -2218,8 +2228,6 @@ + pProjectionDoc->getView()->setInitialClientSize(); + pProjectionDoc->Activate(); + } +- +- + void + PhantomFileView::OnRasterize (wxCommandEvent& event) + { +@@ -2248,10 +2256,12 @@ + + #if HAVE_WXTHREADS + if (theApp->getUseBackgroundTasks()) { +- RasterizerSupervisorThread* pThread = new RasterizerSupervisorThread (this, m_iDefaultRasterNX, m_iDefaultRasterNY, +- m_iDefaultRasterNSamples, m_dDefaultRasterViewRatio, os.str().c_str()); ++ RasterizerSupervisorThread* pThread = new RasterizerSupervisorThread ++ (this, m_iDefaultRasterNX, m_iDefaultRasterNY, ++ m_iDefaultRasterNSamples, m_dDefaultRasterViewRatio, ++ wxConvUTF8.cMB2WX(os.str().c_str())); + if (pThread->Create() != wxTHREAD_NO_ERROR) { +- *theApp->getLog() << "Error creating rasterizer thread\n"; ++ *theApp->getLog() << _T("Error creating rasterizer thread\n"); + return; + } + pThread->SetPriority (60); +@@ -2261,8 +2271,8 @@ + { + ImageFile* pImageFile = new ImageFile (m_iDefaultRasterNX, m_iDefaultRasterNY); + +- wxProgressDialog dlgProgress (wxString("Rasterize"), +- wxString("Rasterization Progress"), ++ wxProgressDialog dlgProgress (_T("Rasterize"), ++ _T("Rasterization Progress"), + pImageFile->nx() + 1, + getFrameForChild(), + wxPD_CAN_ABORT ); +@@ -2286,7 +2296,7 @@ + pRasterDoc->setImageFile (pImageFile); + if (theApp->getAskDeleteNewDocs()) + pRasterDoc->Modify (true); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + pImageFile->labelAdd (os.str().c_str(), timer.timerEnd()); + + pRasterDoc->UpdateAllViews(this); +@@ -2302,7 +2312,7 @@ + PhantomCanvas* pCanvas = new PhantomCanvas (this, parent, wxPoint(-1,-1), + wxSize(-1,-1), 0); + pCanvas->SetBackgroundColour(*wxWHITE); +- pCanvas->Clear(); ++ pCanvas->ClearBackground(); + + return pCanvas; + } +@@ -2315,50 +2325,50 @@ + PhantomFileView::CreateChildFrame(wxDocument *doc, wxView *view) + { + #if CTSIM_MDI +- wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); ++ wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Phantom Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); + #else +- wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); ++ wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Phantom Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); + #endif + theApp->setIconForFrame (subframe); + + m_pFileMenu = new wxMenu; + +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P"); +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F"); +- m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O"); +- m_pFileMenu->Append(wxID_SAVEAS, "Save &As..."); +- m_pFileMenu->Append(wxID_CLOSE, "&Close"); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P")); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F")); ++ m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O")); ++ m_pFileMenu->Append(wxID_SAVEAS, _T("Save &As...")); ++ m_pFileMenu->Append(wxID_CLOSE, _T("&Close")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(PHMMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I"); ++ m_pFileMenu->Append(PHMMENU_FILE_PROPERTIES, _T("P&roperties\tCtrl-I")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(wxID_PRINT, "&Print..."); +- m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup..."); +- m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view"); ++ m_pFileMenu->Append(wxID_PRINT, _T("&Print...")); ++ m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup...")); ++ m_pFileMenu->Append(wxID_PREVIEW, _T("Print Pre&view")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M"); ++ m_pFileMenu->Append(MAINMENU_IMPORT, _T("&Import...\tCtrl-M")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces..."); +- m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit"); ++ m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces...")); ++ m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit")); + GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu); + GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu); + + wxMenu *process_menu = new wxMenu; +- process_menu->Append(PHMMENU_PROCESS_RASTERIZE, "&Rasterize...\tCtrl-R"); +- process_menu->Append(PHMMENU_PROCESS_PROJECTIONS, "&Projections...\tCtrl-J"); ++ process_menu->Append(PHMMENU_PROCESS_RASTERIZE, _T("&Rasterize...\tCtrl-R")); ++ process_menu->Append(PHMMENU_PROCESS_PROJECTIONS, _T("&Projections...\tCtrl-J")); + + wxMenu *help_menu = new wxMenu; +- help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); +- help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); +- help_menu->Append (IDH_QUICKSTART, "&Quick Start"); +- help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); ++ help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1")); ++ help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips")); ++ help_menu->Append (IDH_QUICKSTART, _T("&Quick Start")); ++ help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About")); + + wxMenuBar *menu_bar = new wxMenuBar; + +- menu_bar->Append(m_pFileMenu, "&File"); +- menu_bar->Append(process_menu, "&Process"); +- menu_bar->Append(help_menu, "&Help"); ++ menu_bar->Append(m_pFileMenu, _T("&File")); ++ menu_bar->Append(process_menu, _T("&Process")); ++ menu_bar->Append(help_menu, _T("&Help")); + + subframe->SetMenuBar(menu_bar); + subframe->Centre(wxBOTH); +@@ -2382,7 +2392,7 @@ + m_pCanvas = CreateCanvas (m_pFrame); + m_pFrame->SetClientSize (m_pCanvas->GetBestSize()); + m_pCanvas->SetClientSize (m_pCanvas->GetBestSize()); +- m_pFrame->SetTitle ("PhantomFileView"); ++ m_pFrame->SetTitle (_T("PhantomFileView")); + + m_pFrame->Show(true); + Activate(true); +@@ -2536,7 +2546,7 @@ + ProjectionFileView::~ProjectionFileView() + { + GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu); +- GetDocumentManager()->ActivateView(this, FALSE, TRUE);; ++ GetDocumentManager()->ActivateView(this, FALSE);; + } + + void +@@ -2545,8 +2555,8 @@ + const Projections& rProj = GetDocument()->getProjections(); + std::ostringstream os; + rProj.printScanInfo(os); +- *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n"; +- wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Projection File Properties", wxOK | wxICON_INFORMATION); ++ *theApp->getLog() << _T(">>>>\n") << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("<<<<\n"); ++ wxMessageDialog dialogMsg (getFrameForChild(), wxConvUTF8.cMB2WX(os.str().c_str()), _T("Projection File Properties"), wxOK | wxICON_INFORMATION); + dialogMsg.ShowModal(); + GetDocument()->Activate(); + } +@@ -2576,8 +2586,8 @@ + pRectDoc->setImageFile (pIF); + pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime()); + std::ostringstream os; +- os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to rectangular image"; +- *theApp->getLog() << os.str().c_str() << "\n"; ++ os << "Convert projection file " << getFrame()->GetTitle().c_str() << " to rectangular image"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + pIF->labelAdd (os.str().c_str()); + if (theApp->getAskDeleteNewDocs()) + pRectDoc->Modify (true); +@@ -2590,19 +2600,19 @@ + ProjectionFileView::OnConvertPolar (wxCommandEvent& event) + { + Projections& rProj = GetDocument()->getProjections(); +- DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), "Convert Polar", m_iDefaultPolarNX, m_iDefaultPolarNY, ++ DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), _T("Convert Polar"), m_iDefaultPolarNX, m_iDefaultPolarNY, + m_iDefaultPolarInterpolation, -1, IDH_DLG_POLAR); + if (dialogPolar.ShowModal() == wxID_OK) { +- wxProgressDialog dlgProgress (wxString("Convert Polar"), wxString("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); +- wxString strInterpolation (dialogPolar.getInterpolationName()); ++ wxProgressDialog dlgProgress (_T("Convert Polar"), _T("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); ++ wxString strInterpolation (dialogPolar.getInterpolationName(), wxConvUTF8); + m_iDefaultPolarNX = dialogPolar.getXSize(); + m_iDefaultPolarNY = dialogPolar.getYSize(); + ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY); +- m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str()); ++ m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.mb_str(wxConvUTF8)); + + if (! rProj.convertPolar (*pIF, m_iDefaultPolarInterpolation)) { + delete pIF; +- *theApp->getLog() << "Error converting to Polar\n"; ++ *theApp->getLog() << _T("Error converting to Polar\n"); + return; + } + +@@ -2614,10 +2624,10 @@ + pPolarDoc->setImageFile (pIF); + pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime()); + std::ostringstream os; +- os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to polar image: xSize=" ++ os << "Convert projection file " << getFrame()->GetTitle().c_str() << " to polar image: xSize=" + << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation=" + << strInterpolation.c_str(); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + pIF->labelAdd (os.str().c_str()); + if (theApp->getAskDeleteNewDocs()) + pPolarDoc->Modify (true); +@@ -2631,20 +2641,20 @@ + ProjectionFileView::OnConvertFFTPolar (wxCommandEvent& event) + { + Projections& rProj = GetDocument()->getProjections(); +- DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), "Convert to FFT Polar", m_iDefaultPolarNX, m_iDefaultPolarNY, ++ DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), _T("Convert to FFT Polar"), m_iDefaultPolarNX, m_iDefaultPolarNY, + m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad, IDH_DLG_FFT_POLAR); + if (dialogPolar.ShowModal() == wxID_OK) { +- wxProgressDialog dlgProgress (wxString("Convert FFT Polar"), wxString("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); +- wxString strInterpolation (dialogPolar.getInterpolationName()); ++ wxProgressDialog dlgProgress (_T("Convert FFT Polar"), _T("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); ++ wxString strInterpolation (dialogPolar.getInterpolationName(), wxConvUTF8); + m_iDefaultPolarNX = dialogPolar.getXSize(); + m_iDefaultPolarNY = dialogPolar.getYSize(); + m_iDefaultPolarZeropad = dialogPolar.getZeropad(); + ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY); + +- m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str()); ++ m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.mb_str(wxConvUTF8)); + if (! rProj.convertFFTPolar (*pIF, m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad)) { + delete pIF; +- *theApp->getLog() << "Error converting to polar\n"; ++ *theApp->getLog() << _T("Error converting to polar\n"); + return; + } + ImageFileDocument* pPolarDoc = theApp->newImageDoc(); +@@ -2655,10 +2665,10 @@ + pPolarDoc->setImageFile (pIF); + pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime()); + std::ostringstream os; +- os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to FFT polar image: xSize=" ++ os << "Convert projection file " << getFrame()->GetTitle().c_str() << " to FFT polar image: xSize=" + << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation=" + << strInterpolation.c_str() << ", zeropad=" << m_iDefaultPolarZeropad; +- *theApp->getLog() << os.str().c_str() << "\n"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + pIF->labelAdd (os.str().c_str()); + if (theApp->getAskDeleteNewDocs()) + pPolarDoc->Modify (true); +@@ -2771,8 +2781,8 @@ + rPlotFile.addColumn (0, pX); + rPlotFile.addColumn (1, pY); + rPlotFile.addDescription (rProj.remark()); +- os << " plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str(); +- *theApp->getLog() << os.str().c_str() << "\n"; ++ os << " plot of " << dynamic_cast(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str(); ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + rPlotFile.addDescription (os.str().c_str()); + delete pX; + delete pY; +@@ -2789,10 +2799,10 @@ + { + Projections& rProj = GetDocument()->getProjections(); + if (rProj.geometry() == Scanner::GEOMETRY_PARALLEL) { +- wxMessageBox ("Projections are already parallel", "Error"); ++ wxMessageBox (_T("Projections are already parallel"), _T("Error")); + return; + } +- wxProgressDialog dlgProgress (wxString("Convert to Parallel"), wxString("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); ++ wxProgressDialog dlgProgress (_T("Convert to Parallel"), _T("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); + Projections* pProjNew = rProj.interpolateToParallel(); + ProjectionFileDocument* pProjDocNew = theApp->newProjectionDoc(); + pProjDocNew->setProjections (pProjNew); +@@ -2806,7 +2816,7 @@ + pFrame->SetFocus(); + pFrame->Raise(); + } +- GetDocumentManager()->ActivateView (projView, true, false); ++ GetDocumentManager()->ActivateView (projView, true); + } + if (theApp->getAskDeleteNewDocs()) + pProjDocNew-> Modify(true); +@@ -2819,20 +2829,20 @@ + ProjectionFileView::OnReconstructFourier (wxCommandEvent& event) + { + Projections& rProj = GetDocument()->getProjections(); +- DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), "Fourier Reconstruction", m_iDefaultPolarNX, m_iDefaultPolarNY, ++ DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), _T("Fourier Reconstruction"), m_iDefaultPolarNX, m_iDefaultPolarNY, + m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad, IDH_DLG_RECON_FOURIER); + if (dialogPolar.ShowModal() == wxID_OK) { +- wxProgressDialog dlgProgress (wxString("Reconstruction Fourier"), wxString("Reconstruction Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); +- wxString strInterpolation (dialogPolar.getInterpolationName()); ++ wxProgressDialog dlgProgress (_T("Reconstruction Fourier"), _T("Reconstruction Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); ++ wxString strInterpolation (dialogPolar.getInterpolationName(), wxConvUTF8); + m_iDefaultPolarNX = dialogPolar.getXSize(); + m_iDefaultPolarNY = dialogPolar.getYSize(); + m_iDefaultPolarZeropad = dialogPolar.getZeropad(); + ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY); + +- m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str()); ++ m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.mb_str(wxConvUTF8)); + if (! rProj.convertFFTPolar (*pIF, m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad)) { + delete pIF; +- *theApp->getLog() << "Error converting to polar\n"; ++ *theApp->getLog() << _T("Error converting to polar\n"); + return; + } + #ifdef HAVE_FFT +@@ -2849,10 +2859,10 @@ + pPolarDoc->setImageFile (pIF); + pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime()); + std::ostringstream os; +- os << "Reconstruct Fourier " << GetFrame()->GetTitle().c_str() << ": xSize=" ++ os << "Reconstruct Fourier " << getFrame()->GetTitle().mb_str(wxConvUTF8) << ": xSize=" + << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation=" +- << strInterpolation.c_str() << ", zeropad=" << m_iDefaultPolarZeropad; +- *theApp->getLog() << os.str().c_str() << "\n"; ++ << strInterpolation.mb_str(wxConvUTF8) << ", zeropad=" << m_iDefaultPolarZeropad; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + pIF->labelAdd (os.str().c_str()); + if (theApp->getAskDeleteNewDocs()) + pPolarDoc->Modify (true); +@@ -2896,19 +2906,19 @@ + + m_iDefaultNX = dialogReconstruction.getXSize(); + m_iDefaultNY = dialogReconstruction.getYSize(); +- wxString optFilterName = dialogReconstruction.getFilterName(); +- m_iDefaultFilter = SignalFilter::convertFilterNameToID (optFilterName.c_str()); ++ wxString optFilterName (dialogReconstruction.getFilterName(), wxConvUTF8); ++ m_iDefaultFilter = SignalFilter::convertFilterNameToID (optFilterName.mb_str(wxConvUTF8)); + m_dDefaultFilterParam = dialogReconstruction.getFilterParam(); +- wxString optFilterMethodName = dialogReconstruction.getFilterMethodName(); +- m_iDefaultFilterMethod = ProcessSignal::convertFilterMethodNameToID(optFilterMethodName.c_str()); ++ wxString optFilterMethodName (dialogReconstruction.getFilterMethodName(), wxConvUTF8); ++ m_iDefaultFilterMethod = ProcessSignal::convertFilterMethodNameToID(optFilterMethodName.mb_str(wxConvUTF8)); + m_iDefaultZeropad = dialogReconstruction.getZeropad(); +- wxString optFilterGenerationName = dialogReconstruction.getFilterGenerationName(); +- m_iDefaultFilterGeneration = ProcessSignal::convertFilterGenerationNameToID (optFilterGenerationName.c_str()); +- wxString optInterpName = dialogReconstruction.getInterpName(); +- m_iDefaultInterpolation = Backprojector::convertInterpNameToID (optInterpName.c_str()); ++ wxString optFilterGenerationName (dialogReconstruction.getFilterGenerationName(), wxConvUTF8); ++ m_iDefaultFilterGeneration = ProcessSignal::convertFilterGenerationNameToID (optFilterGenerationName.mb_str(wxConvUTF8)); ++ wxString optInterpName (dialogReconstruction.getInterpName(), wxConvUTF8); ++ m_iDefaultInterpolation = Backprojector::convertInterpNameToID (optInterpName.mb_str(wxConvUTF8)); + m_iDefaultInterpParam = dialogReconstruction.getInterpParam(); +- wxString optBackprojectName = dialogReconstruction.getBackprojectName(); +- m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.c_str()); ++ wxString optBackprojectName (dialogReconstruction.getBackprojectName(), wxConvUTF8); ++ m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.mb_str(wxConvUTF8)); + m_iDefaultTrace = dialogReconstruction.getTrace(); + dialogReconstruction.getROI (&defaultROI); + +@@ -2916,7 +2926,7 @@ + return; + + std::ostringstream os; +- os << "Reconstruct " << rProj.getFilename() << ": xSize=" << m_iDefaultNX << ", ySize=" << m_iDefaultNY << ", Filter=" << optFilterName.c_str() << ", FilterParam=" << m_dDefaultFilterParam << ", FilterMethod=" << optFilterMethodName.c_str() << ", FilterGeneration=" << optFilterGenerationName.c_str() << ", Zeropad=" << m_iDefaultZeropad << ", Interpolation=" << optInterpName.c_str() << ", InterpolationParam=" << m_iDefaultInterpParam << ", Backprojection=" << optBackprojectName.c_str(); ++ os << "Reconstruct " << rProj.getFilename() << ": xSize=" << m_iDefaultNX << ", ySize=" << m_iDefaultNY << ", Filter=" << optFilterName.mb_str(wxConvUTF8) << ", FilterParam=" << m_dDefaultFilterParam << ", FilterMethod=" << optFilterMethodName.mb_str(wxConvUTF8) << ", FilterGeneration=" << optFilterGenerationName.mb_str(wxConvUTF8) << ", Zeropad=" << m_iDefaultZeropad << ", Interpolation=" << optInterpName.mb_str(wxConvUTF8) << ", InterpolationParam=" << m_iDefaultInterpParam << ", Backprojection=" << optBackprojectName.mb_str(wxConvUTF8); + if (bRebinToParallel) + os << "; Interpolate to Parallel"; + +@@ -2924,9 +2934,9 @@ + ImageFile* pImageFile = NULL; + if (m_iDefaultTrace > Trace::TRACE_CONSOLE) { + pImageFile = new ImageFile (m_iDefaultNX, m_iDefaultNY); +- Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(), +- m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), +- optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace, ++ Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.mb_str(wxConvUTF8), ++ m_dDefaultFilterParam, optFilterMethodName.mb_str(wxConvUTF8), m_iDefaultZeropad, optFilterGenerationName.mb_str(wxConvUTF8), ++ optInterpName.mb_str(wxConvUTF8), m_iDefaultInterpParam, optBackprojectName.mb_str(wxConvUTF8), m_iDefaultTrace, + &defaultROI, bRebinToParallel); + + ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstructor, rProj, *pImageFile, m_iDefaultTrace, getFrameForChild()); +@@ -2941,7 +2951,7 @@ + ::wxYield(); + while (pDlgReconstruct->isPaused()) { + ::wxYield(); +- ::wxUsleep(50); ++ ::wxMilliSleep(50); + } + } + pReconstructor->postProcessing(); +@@ -2950,10 +2960,13 @@ + } else { + #if HAVE_WXTHREADS + if (theApp->getUseBackgroundTasks()) { +- ReconstructorSupervisorThread* pReconstructor = new ReconstructorSupervisorThread (this, m_iDefaultNX, +- m_iDefaultNY, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), +- m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, +- optBackprojectName.c_str(), os.str().c_str(), &defaultROI, bRebinToParallel); ++ ReconstructorSupervisorThread* pReconstructor = new ReconstructorSupervisorThread ++ (this, m_iDefaultNX, m_iDefaultNY, optFilterName.mb_str(wxConvUTF8), ++ m_dDefaultFilterParam, optFilterMethodName.mb_str(wxConvUTF8), ++ m_iDefaultZeropad, optFilterGenerationName.mb_str(wxConvUTF8), ++ optInterpName.mb_str(wxConvUTF8), m_iDefaultInterpParam, ++ optBackprojectName.mb_str(wxConvUTF8), ++ wxConvUTF8.cMB2WX(os.str().c_str()), &defaultROI, bRebinToParallel); + if (pReconstructor->Create() != wxTHREAD_NO_ERROR) { + sys_error (ERR_SEVERE, "Error creating reconstructor thread"); + delete pReconstructor; +@@ -2966,10 +2979,10 @@ + #endif + { + pImageFile = new ImageFile (m_iDefaultNX, m_iDefaultNY); +- wxProgressDialog dlgProgress (wxString("Reconstruction"), wxString("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT ); +- Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(), +- m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), +- optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace, ++ wxProgressDialog dlgProgress (_T("Reconstruction"), _T("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT ); ++ Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.mb_str(wxConvUTF8), ++ m_dDefaultFilterParam, optFilterMethodName.mb_str(wxConvUTF8), m_iDefaultZeropad, optFilterGenerationName.mb_str(wxConvUTF8), ++ optInterpName.mb_str(wxConvUTF8), m_iDefaultInterpParam, optBackprojectName.mb_str(wxConvUTF8), m_iDefaultTrace, + &defaultROI, bRebinToParallel); + + for (int iView = 0; iView < rProj.nView(); iView++) { +@@ -2989,7 +3002,7 @@ + sys_error (ERR_SEVERE, "Unable to create image file"); + return; + } +- *theApp->getLog() << os.str().c_str() << "\n"; ++ *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n"); + pImageFile->labelAdd (rProj.getLabel()); + pImageFile->labelAdd (os.str().c_str(), timerRecon.timerEnd()); + +@@ -3019,7 +3032,7 @@ + + pCanvas->SetScrollbars(20, 20, 50, 50); + pCanvas->SetBackgroundColour(*wxWHITE); +- pCanvas->Clear(); ++ pCanvas->ClearBackground(); + + return pCanvas; + } +@@ -3032,69 +3045,69 @@ + ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view) + { + #ifdef CTSIM_MDI +- wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Projection Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); ++ wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Projection Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); + #else +- wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "Projection Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); ++ wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Projection Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); + #endif + theApp->setIconForFrame (subframe); + + m_pFileMenu = new wxMenu; + +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P"); +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F"); +- m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O"); +- m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S"); +- m_pFileMenu->Append(wxID_SAVEAS, "Save &As..."); +- m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W"); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P")); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F")); ++ m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O")); ++ m_pFileMenu->Append(wxID_SAVE, _T("&Save\tCtrl-S")); ++ m_pFileMenu->Append(wxID_SAVEAS, _T("Save &As...")); ++ m_pFileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl-W")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(PJMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I"); ++ m_pFileMenu->Append(PJMENU_FILE_PROPERTIES, _T("P&roperties\tCtrl-I")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(wxID_PRINT, "&Print..."); +- m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup..."); +- m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view"); ++ m_pFileMenu->Append(wxID_PRINT, _T("&Print...")); ++ m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup...")); ++ m_pFileMenu->Append(wxID_PREVIEW, _T("Print Pre&view")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M"); ++ m_pFileMenu->Append(MAINMENU_IMPORT, _T("&Import...\tCtrl-M")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces..."); +- m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit"); ++ m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces...")); ++ m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit")); + GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu); + GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu); + + m_pConvertMenu = new wxMenu; +- m_pConvertMenu->Append (PJMENU_CONVERT_RECTANGULAR, "&Rectangular Image"); +- m_pConvertMenu->Append (PJMENU_CONVERT_POLAR, "&Polar Image...\tCtrl-L"); +- m_pConvertMenu->Append (PJMENU_CONVERT_FFT_POLAR, "FF&T->Polar Image...\tCtrl-T"); ++ m_pConvertMenu->Append (PJMENU_CONVERT_RECTANGULAR, _T("&Rectangular Image")); ++ m_pConvertMenu->Append (PJMENU_CONVERT_POLAR, _T("&Polar Image...\tCtrl-L")); ++ m_pConvertMenu->Append (PJMENU_CONVERT_FFT_POLAR, _T("FF&T->Polar Image...\tCtrl-T")); + m_pConvertMenu->AppendSeparator(); +- m_pConvertMenu->Append (PJMENU_CONVERT_PARALLEL, "&Interpolate to Parallel"); ++ m_pConvertMenu->Append (PJMENU_CONVERT_PARALLEL, _T("&Interpolate to Parallel")); + + // wxMenu* filter_menu = new wxMenu; +- // filter_menu->Append (PJMENU_ARTIFACT_REDUCTION, "&Artifact Reduction"); ++ // filter_menu->Append (PJMENU_ARTIFACT_REDUCTION, _T("&Artifact Reduction")); + + wxMenu* analyze_menu = new wxMenu; +- analyze_menu->Append (PJMENU_PLOT_HISTOGRAM, "&Plot Histogram"); +- analyze_menu->Append (PJMENU_PLOT_TTHETA_SAMPLING, "Plot T-T&heta Sampling...\tCtrl-H"); ++ analyze_menu->Append (PJMENU_PLOT_HISTOGRAM, _T("&Plot Histogram")); ++ analyze_menu->Append (PJMENU_PLOT_TTHETA_SAMPLING, _T("Plot T-T&heta Sampling...\tCtrl-H")); + + m_pReconstructMenu = new wxMenu; +- m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...\tCtrl-R", "Reconstruct image using filtered backprojection"); +- m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP_REBIN, "Filtered &Backprojection (Rebin to Parallel)...\tCtrl-B", "Reconstruct image using filtered backprojection"); +- m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Inverse Fourier...\tCtrl-E", "Direct inverse Fourier"); ++ m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP, _T("&Filtered Backprojection...\tCtrl-R"), _T("Reconstruct image using filtered backprojection")); ++ m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP_REBIN, _T("Filtered &Backprojection (Rebin to Parallel)...\tCtrl-B"), _T("Reconstruct image using filtered backprojection")); ++ m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FOURIER, _T("&Inverse Fourier...\tCtrl-E"), _T("Direct inverse Fourier")); + + wxMenu *help_menu = new wxMenu; +- help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); +- help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); +- help_menu->Append (IDH_QUICKSTART, "&Quick Start"); +- help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); ++ help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1")); ++ help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips")); ++ help_menu->Append (IDH_QUICKSTART, _T("&Quick Start")); ++ help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About")); + + wxMenuBar *menu_bar = new wxMenuBar; + +- menu_bar->Append (m_pFileMenu, "&File"); +- menu_bar->Append (m_pConvertMenu, "&Convert"); +- // menu_bar->Append (filter_menu, "Fi<er"); +- menu_bar->Append (analyze_menu, "&Analyze"); +- menu_bar->Append (m_pReconstructMenu, "&Reconstruct"); +- menu_bar->Append (help_menu, "&Help"); ++ menu_bar->Append (m_pFileMenu, _T("&File")); ++ menu_bar->Append (m_pConvertMenu, _T("&Convert")); ++ // menu_bar->Append (filter_menu, _T("Fi<er")); ++ menu_bar->Append (analyze_menu, _T("&Analyze")); ++ menu_bar->Append (m_pReconstructMenu, _T("&Reconstruct")); ++ menu_bar->Append (help_menu, _T("&Help")); + + subframe->SetMenuBar(menu_bar); + subframe->Centre(wxBOTH); +@@ -3122,7 +3135,7 @@ + m_pCanvas = CreateCanvas (m_pFrame); + m_pFrame->SetClientSize (m_pCanvas->GetBestSize()); + m_pCanvas->SetClientSize (m_pCanvas->GetBestSize()); +- m_pFrame->SetTitle ("ProjectionFileView"); ++ m_pFrame->SetTitle (_T("ProjectionFileView")); + + m_pFrame->Show(true); + Activate(true); +@@ -3215,7 +3228,7 @@ + bool + ProjectionFileView::OnClose (bool deleteWindow) + { +- //GetDocumentManager()->ActivateView (this, false, true); ++ //GetDocumentManager()->ActivateView (this, false); + if (! GetDocument() || ! GetDocument()->Close()) + return false; + +@@ -3290,7 +3303,7 @@ + delete m_pEZPlot; + + GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu); +- GetDocumentManager()->ActivateView(this, FALSE, TRUE); ++ GetDocumentManager()->ActivateView(this, FALSE); + } + + void +@@ -3300,8 +3313,9 @@ + std::ostringstream os; + os << "Columns: " << rPlot.getNumColumns() << ", Records: " << rPlot.getNumRecords() << "\n"; + rPlot.printHeadersBrief (os); +- *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<<\n"; +- wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Plot File Properties", wxOK | wxICON_INFORMATION); ++ *theApp->getLog() << _T(">>>>\n") << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("<<<<<\n"); ++ wxMessageDialog dialogMsg (getFrameForChild(), wxConvUTF8.cMB2WX(os.str().c_str()), _T("Plot File Properties"), ++ wxOK | wxICON_INFORMATION); + dialogMsg.ShowModal(); + GetDocument()->Activate(); + } +@@ -3338,7 +3352,7 @@ + + if (! m_bMinSpecified || ! m_bMaxSpecified) { + if (! rPlotFile.getMinMax (1, min, max)) { +- *theApp->getLog() << "Error: unable to find Min/Max\n"; ++ *theApp->getLog() << _T("Error: unable to find Min/Max\n"); + return; + } + } +@@ -3348,7 +3362,7 @@ + if (m_bMaxSpecified) + max = m_dMaxPixel; + +- DialogGetMinMax dialogMinMax (getFrameForChild(), "Set Y-axis Minimum & Maximum", min, max); ++ DialogGetMinMax dialogMinMax (getFrameForChild(), _T("Set Y-axis Minimum & Maximum"), min, max); + int retVal = dialogMinMax.ShowModal(); + if (retVal == wxID_OK) { + m_bMinSpecified = true; +@@ -3379,7 +3393,7 @@ + + pCanvas = new PlotFileCanvas (this, parent, wxPoint(-1,-1), wxSize(-1,-1), 0); + pCanvas->SetBackgroundColour(*wxWHITE); +- pCanvas->Clear(); ++ pCanvas->ClearBackground(); + + return pCanvas; + } +@@ -3392,52 +3406,52 @@ + PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view) + { + #ifdef CTSIM_MDI +- wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Plot Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); ++ wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Plot Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); + #else +- wxDocChildFrame *subframe = new wxDocChildFrame(doc, view, theApp->getMainFrame(), -1, "Plot Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); ++ wxDocChildFrame *subframe = new wxDocChildFrame(doc, view, theApp->getMainFrame(), -1, _T("Plot Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE); + #endif + theApp->setIconForFrame (subframe); + + m_pFileMenu = new wxMenu; + +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P"); +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F"); +- m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O"); +- m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S"); +- m_pFileMenu->Append(wxID_SAVEAS, "Save &As..."); +- m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W"); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P")); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F")); ++ m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O")); ++ m_pFileMenu->Append(wxID_SAVE, _T("&Save\tCtrl-S")); ++ m_pFileMenu->Append(wxID_SAVEAS, _T("Save &As...")); ++ m_pFileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl-W")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(PLOTMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I"); ++ m_pFileMenu->Append(PLOTMENU_FILE_PROPERTIES, _T("P&roperties\tCtrl-I")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(wxID_PRINT, "&Print..."); +- m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup..."); +- m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view"); ++ m_pFileMenu->Append(wxID_PRINT, _T("&Print...")); ++ m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup...")); ++ m_pFileMenu->Append(wxID_PREVIEW, _T("Print Pre&view")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M"); ++ m_pFileMenu->Append(MAINMENU_IMPORT, _T("&Import...\tCtrl-M")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces..."); +- m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit"); ++ m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces...")); ++ m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit")); + GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu); + GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu); + + wxMenu *view_menu = new wxMenu; +- view_menu->Append(PLOTMENU_VIEW_SCALE_MINMAX, "Display Scale &Set...\tCtrl-E"); +- view_menu->Append(PLOTMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...\tCtrl-A"); +- view_menu->Append(PLOTMENU_VIEW_SCALE_FULL, "Display &Full Scale\tCtrl-U"); ++ view_menu->Append(PLOTMENU_VIEW_SCALE_MINMAX, _T("Display Scale &Set...\tCtrl-E")); ++ view_menu->Append(PLOTMENU_VIEW_SCALE_AUTO, _T("Display Scale &Auto...\tCtrl-A")); ++ view_menu->Append(PLOTMENU_VIEW_SCALE_FULL, _T("Display &Full Scale\tCtrl-U")); + + wxMenu *help_menu = new wxMenu; +- help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); +- help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); +- help_menu->Append (IDH_QUICKSTART, "&Quick Start"); +- help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); ++ help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1")); ++ help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips")); ++ help_menu->Append (IDH_QUICKSTART, _T("&Quick Start")); ++ help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About")); + + wxMenuBar *menu_bar = new wxMenuBar; + +- menu_bar->Append(m_pFileMenu, "&File"); +- menu_bar->Append(view_menu, "&View"); +- menu_bar->Append(help_menu, "&Help"); ++ menu_bar->Append(m_pFileMenu, _T("&File")); ++ menu_bar->Append(view_menu, _T("&View")); ++ menu_bar->Append(help_menu, _T("&Help")); + + subframe->SetMenuBar(menu_bar); + subframe->Centre(wxBOTH); +@@ -3466,7 +3480,7 @@ + m_pCanvas = CreateCanvas (m_pFrame); + m_pFrame->SetClientSize (m_pCanvas->GetBestSize()); + m_pCanvas->SetClientSize (m_pCanvas->GetBestSize()); +- m_pFrame->SetTitle ("Plot File"); ++ m_pFrame->SetTitle (_T("Plot File")); + + m_pFrame->Show(true); + Activate(true); +@@ -3593,7 +3607,7 @@ + TextFileView::~TextFileView() + { + GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu); +- GetDocumentManager()->ActivateView(this, FALSE, TRUE);; ++ GetDocumentManager()->ActivateView(this, FALSE);; + } + + bool TextFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) ) +@@ -3603,9 +3617,9 @@ + + int width, height; + m_pFrame->GetClientSize(&width, &height); +- m_pFrame->SetTitle("TextFile"); ++ m_pFrame->SetTitle(_T("TextFile")); + m_pCanvas = new TextFileCanvas (this, m_pFrame, wxPoint(-1,-1), wxSize(width, height), wxTE_MULTILINE | wxTE_READONLY); +- m_pFrame->SetTitle("Log"); ++ m_pFrame->SetTitle(_T("Log")); + + m_pFrame->Show (true); + Activate (true); +@@ -3629,7 +3643,7 @@ + return false; + + Activate(false); +- //GetDocumentManager()->ActivateView (this, false, true); ++ //GetDocumentManager()->ActivateView (this, false); + if (! GetDocument() || ! GetDocument()->Close()) + return false; + +@@ -3652,43 +3666,43 @@ + TextFileView::CreateChildFrame (wxDocument *doc, wxView *view) + { + #if CTSIM_MDI +- wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "TextFile Frame", wxPoint(-1, -1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE, "Log"); ++ wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("TextFile Frame"), wxPoint(-1, -1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE, _T("Log")); + #else +- wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "TextFile Frame", wxPoint(-1, -1), wxSize(300, 150), wxDEFAULT_FRAME_STYLE, "Log"); ++ wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, _T("TextFile Frame"), wxPoint(-1, -1), wxSize(300, 150), wxDEFAULT_FRAME_STYLE, _T("Log")); + #endif + theApp->setIconForFrame (subframe); + + m_pFileMenu = new wxMenu; + +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P"); +- m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F"); +- m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O"); +- m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S"); +- m_pFileMenu->Append(wxID_SAVEAS, "Save &As..."); +- // m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W"); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P")); ++ m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F")); ++ m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O")); ++ m_pFileMenu->Append(wxID_SAVE, _T("&Save\tCtrl-S")); ++ m_pFileMenu->Append(wxID_SAVEAS, _T("Save &As...")); ++ // m_pFileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl-W")); + + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(wxID_PRINT, "&Print..."); +- m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup..."); +- m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view"); ++ m_pFileMenu->Append(wxID_PRINT, _T("&Print...")); ++ m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup...")); ++ m_pFileMenu->Append(wxID_PREVIEW, _T("Print Pre&view")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M"); ++ m_pFileMenu->Append(MAINMENU_IMPORT, _T("&Import...\tCtrl-M")); + m_pFileMenu->AppendSeparator(); +- m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces..."); +- m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit"); ++ m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces...")); ++ m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit")); + GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu); + GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu); + + wxMenu *help_menu = new wxMenu; +- help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); +- help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); +- help_menu->Append (IDH_QUICKSTART, "&Quick Start"); +- help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); ++ help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1")); ++ help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips")); ++ help_menu->Append (IDH_QUICKSTART, _T("&Quick Start")); ++ help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About")); + + wxMenuBar *menu_bar = new wxMenuBar; + +- menu_bar->Append(m_pFileMenu, "&File"); +- menu_bar->Append(help_menu, "&Help"); ++ menu_bar->Append(m_pFileMenu, _T("&File")); ++ menu_bar->Append(help_menu, _T("&Help")); + + subframe->SetMenuBar(menu_bar); + subframe->Centre(wxBOTH); +@@ -3699,7 +3713,7 @@ + + // Define a constructor for my text subwindow + TextFileCanvas::TextFileCanvas (TextFileView* v, wxFrame* frame, const wxPoint& pos, const wxSize& size, long style) +-: wxTextCtrl (frame, -1, "", pos, size, style), m_pView(v) ++ : wxTextCtrl (frame, -1, _T(""), pos, size, style), m_pView(v) + { + } + +diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/views.h ctsim-wx2.8/src/views.h +--- ctsim/src/views.h 2007-09-04 00:40:08.000000000 -0600 ++++ ctsim-wx2.8/src/views.h 2008-07-29 20:22:04.805299915 -0600 +@@ -67,7 +67,7 @@ + + int m_iDefaultExportFormatID; + +- wxWindow* getFrameForChild() ++ wxFrame* getFrameForChild() + #if CTSIM_MDI + { return theApp->getMainFrame(); } + #else