r419: Added accelerator tables to frames
authorKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 18 Jan 2001 23:34:01 +0000 (23:34 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 18 Jan 2001 23:34:01 +0000 (23:34 +0000)
ChangeLog
msvc/ctsim/ctsim.plg
src/ctsim.cpp
src/views.cpp

index 32e398ea961ce4bd8f0e8a106cfbc62f1462c7ea..132539473e5550c000b4cf3457147dae9a93054a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 3.0.0beta1 - Released
 
+       * ctsim: Added accelerator (hotkeys) to windows
+
        * ctsim: Online help added as well as HTML help
        
        * ctsim: Added icons to Frames on Windows versions
index 5f5daf47de0a1cafcdfb3d59f5fcb61e45ae5d2b..33da497a8b5861b194039a50de7b5ddbf1433473 100644 (file)
 <pre>
 <h1>Build Log</h1>
 <h3>
---------------------Configuration: ctsim - Win32 Debug--------------------
+--------------------Configuration: libctsim - Win32 Release--------------------
 </h3>
 <h3>Command Lines</h3>
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP9D.tmp" with contents
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF3.tmp" with contents
 [
-/nologo /G6 /MTd /W3 /Gm /GR /GX /ZI /Od /I "\wx2\include" /I "." /I "..\..\include" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\zlib" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /D VERSION=\"2.5.0\" /D "_DEBUG" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.0alpha5\" /FR"Debug/" /Fp"Debug/ctsim.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
-"C:\ctsim\src\ctsim.cpp"
+/nologo /G6 /MT /W3 /GR- /GX /O2 /I "..\..\..\zlib" /I "..\..\INCLUDE" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /I "..\..\..\wx2\include" /D "NDEBUG" /D "HAVE_STRING_H" /D "HAVE_GETOPT_H" /D "WIN32" /D "_MBCS" /D "_LIB" /D "MSVC" /D "HAVE_FFTW" /D "HAVE_PNG" /D "HAVE_SGP" /D "HAVE_WXWINDOWS" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /Fp"Release/libctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c 
+"D:\ctsim\libctsim\backprojectors.cpp"
 ]
-Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP9D.tmp" 
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP9E.tmp" with contents
+Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF3.tmp" 
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF4.tmp" with contents
 [
-comctl32.lib winmm.lib rpcrt4.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libctsim/Debug/libctsim.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\lpng108\msvc\win32\libpng\lib_dbg\libpng.lib ..\..\..\lpng108\msvc\win32\zlib\lib_dbg\zlib.lib libcmtd.lib ..\..\..\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib ..\..\..\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib ../../../wx2/lib/wxd.lib xpmd.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/ctsim.pdb" /debug /machine:I386 /out:"Debug/ctsim.exe" /pdbtype:sept /libpath:"..\..\..\lpng108\msvc\win32\libpng\lib" /libpath:"..\..\..\lpng108\msvc\win32\zlib\lib" /libpath:"..\..\..\wx2\lib" 
-.\Debug\ctsim.obj
-.\Debug\dialogs.obj
-.\Debug\dlgprojections.obj
-.\Debug\dlgreconstruct.obj
-.\Debug\docs.obj
-.\Debug\views.obj
-.\Debug\ctsim.res
-\ctsim\msvc\libctsim\Debug\libctsim.lib
-"\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib"
-"\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib"
-\wx2\lib\wxd.lib
-\wx2\lib\xpmd.lib
+/nologo /G6 /MT /W3 /GR /GX /O2 /I "..\..\..\zlib" /I "..\..\INCLUDE" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /I "..\..\..\wx2\include" /D "NDEBUG" /D "HAVE_STRING_H" /D "HAVE_GETOPT_H" /D "WIN32" /D "_MBCS" /D "_LIB" /D "MSVC" /D "HAVE_FFTW" /D "HAVE_PNG" /D "HAVE_SGP" /D "HAVE_WXWINDOWS" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /Fp"Release/libctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c 
+"D:\ctsim\libctgraphics\dlgezplot.cpp"
+"D:\ctsim\libctgraphics\ezplot.cpp"
+"D:\ctsim\libctgraphics\ezset.cpp"
+"D:\ctsim\libctgraphics\ezsupport.cpp"
+"D:\ctsim\libctsim\filter.cpp"
+"D:\ctsim\libctsim\fourier.cpp"
+"D:\ctsim\libctsim\globalvars.cpp"
+"D:\ctsim\libctsupport\hashtable.cpp"
+"D:\ctsim\libctsim\imagefile.cpp"
+"D:\ctsim\libctsim\phantom.cpp"
+"D:\ctsim\libctsupport\plotfile.cpp"
+"D:\ctsim\libctgraphics\pol.cpp"
+"D:\ctsim\libctsim\procsignal.cpp"
+"D:\ctsim\libctsim\projections.cpp"
+"D:\ctsim\libctsim\reconstruct.cpp"
+"D:\ctsim\libctsim\scanner.cpp"
+"D:\ctsim\libctgraphics\sgp.cpp"
+"D:\ctsim\libctsupport\syserror.cpp"
+"D:\ctsim\libctsim\trace.cpp"
 ]
-Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP9E.tmp"
+Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF4.tmp" 
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF5.tmp" with contents
+[
+/nologo /out:"Release\libctsim.lib" 
+.\Release\array2dfile.obj
+.\Release\backprojectors.obj
+.\Release\clip.obj
+.\Release\consoleio.obj
+.\Release\dlgezplot.obj
+.\Release\ezplot.obj
+.\Release\ezset.obj
+.\Release\ezsupport.obj
+.\Release\filter.obj
+.\Release\fnetorderstream.obj
+.\Release\fourier.obj
+.\Release\getopt.obj
+.\Release\getopt1.obj
+.\Release\globalvars.obj
+.\Release\hashtable.obj
+.\Release\imagefile.obj
+.\Release\mathfuncs.obj
+.\Release\phantom.obj
+.\Release\plotfile.obj
+.\Release\pol.obj
+.\Release\procsignal.obj
+.\Release\projections.obj
+.\Release\reconstruct.obj
+.\Release\scanner.obj
+.\Release\sgp.obj
+.\Release\strfuncs.obj
+.\Release\syserror.obj
+.\Release\trace.obj
+.\Release\transformmatrix.obj
+.\Release\xform.obj
+]
+Creating command line "link.exe -lib @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF5.tmp"
+<h3>Output Window</h3>
+Compiling...
+backprojectors.cpp
+Compiling...
+dlgezplot.cpp
+ezplot.cpp
+ezset.cpp
+ezsupport.cpp
+filter.cpp
+fourier.cpp
+globalvars.cpp
+hashtable.cpp
+imagefile.cpp
+phantom.cpp
+plotfile.cpp
+pol.cpp
+procsignal.cpp
+projections.cpp
+reconstruct.cpp
+scanner.cpp
+sgp.cpp
+syserror.cpp
+trace.cpp
+Creating library...
+<h3>
+--------------------Configuration: xpm - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF6.tmp" with contents
+[
+/nologo /G6 /MT /W3 /GR /GX /O1 /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /Fo"Release/" /Fd"Release/" /FD /c 
+"D:\wx2\src\xpm\attrib.c"
+"D:\wx2\src\xpm\crbuffri.c"
+"D:\wx2\src\xpm\crdatfri.c"
+"D:\wx2\src\xpm\create.c"
+"D:\wx2\src\xpm\crifrbuf.c"
+"D:\wx2\src\xpm\crifrdat.c"
+"D:\wx2\src\xpm\dataxpm.c"
+"D:\wx2\src\xpm\hashtab.c"
+"D:\wx2\src\xpm\imagexpm.c"
+"D:\wx2\src\xpm\info.c"
+"D:\wx2\src\xpm\misc.c"
+"D:\wx2\src\xpm\parse.c"
+"D:\wx2\src\xpm\rdftodat.c"
+"D:\wx2\src\xpm\rdftoi.c"
+"D:\wx2\src\xpm\rgb.c"
+"D:\wx2\src\xpm\scan.c"
+"D:\wx2\src\xpm\simx.c"
+"D:\wx2\src\xpm\wrffrdat.c"
+"D:\wx2\src\xpm\wrffri.c"
+]
+Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF6.tmp" 
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF7.tmp" with contents
+[
+/nologo /out:"..\..\lib\xpm.lib" 
+.\Release\attrib.obj
+.\Release\crbuffri.obj
+.\Release\crdatfri.obj
+.\Release\create.obj
+.\Release\crifrbuf.obj
+.\Release\crifrdat.obj
+.\Release\dataxpm.obj
+.\Release\hashtab.obj
+.\Release\imagexpm.obj
+.\Release\info.obj
+.\Release\misc.obj
+.\Release\parse.obj
+.\Release\rdftodat.obj
+.\Release\rdftoi.obj
+.\Release\rgb.obj
+.\Release\scan.obj
+.\Release\simx.obj
+.\Release\wrffrdat.obj
+.\Release\wrffri.obj
+]
+Creating command line "link.exe -lib @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF7.tmp"
+<h3>Output Window</h3>
+Compiling...
+attrib.c
+crbuffri.c
+crdatfri.c
+create.c
+crifrbuf.c
+crifrdat.c
+dataxpm.c
+hashtab.c
+imagexpm.c
+info.c
+misc.c
+parse.c
+rdftodat.c
+rdftoi.c
+rgb.c
+scan.c
+simx.c
+wrffrdat.c
+wrffri.c
+Generating Code...
+Creating library...
+<h3>
+--------------------Configuration: ctsim - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Release/ctsim.res" /i "\wx2\include\wx\msw" /i "\wx2\include" /d "NDEBUG" "D:\ctsim\msvc\ctsim\ctsim.rc"" 
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF8.tmp" with contents
+[
+/nologo /G6 /MT /W3 /GR /GX /O2 /I "." /I "..\..\include" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\zlib" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /I "..\..\..\wx2\include" /D "NDEBUG" /D "__WXWIN__" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.0alpha5\" /FR"Release/" /Fp"Release/ctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c 
+"D:\ctsim\src\ctsim.cpp"
+"D:\ctsim\src\dialogs.cpp"
+"D:\ctsim\src\dlgprojections.cpp"
+"D:\ctsim\src\dlgreconstruct.cpp"
+"D:\ctsim\src\docs.cpp"
+"D:\ctsim\src\views.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF8.tmp" 
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF9.tmp" with contents
+[
+kernel32.lib user32.lib wsock32.lib comctl32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libpng.lib zlib.lib xpm.lib /nologo /subsystem:windows /incremental:no /pdb:"Release/ctsim.pdb" /machine:I386 /out:"Release/ctsim.exe" /libpath:"..\..\..\lpng108\msvc\win32\libpng\lib" /libpath:"..\..\..\lpng108\msvc\win32\zlib\lib" /libpath:"..\..\..\wx2\lib" 
+.\Release\ctsim.obj
+.\Release\dialogs.obj
+.\Release\dlgprojections.obj
+.\Release\dlgreconstruct.obj
+.\Release\docs.obj
+.\Release\views.obj
+.\Release\ctsim.res
+\ctsim\msvc\libctsim\Release\libctsim.lib
+"\fftw-2.1.3\Win32\FFTW2st\Release\FFTW2st.lib"
+"\fftw-2.1.3\Win32\RFFTW2st\Release\RFFTW2st.lib"
+\wx2\lib\wx.lib
+\wx2\lib\xpm.lib
+]
+Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPF9.tmp"
 <h3>Output Window</h3>
+Compiling resources...
 Compiling...
 ctsim.cpp
+dialogs.cpp
+dlgprojections.cpp
+dlgreconstruct.cpp
+docs.cpp
+views.cpp
 Linking...
+LINK : warning LNK4089: all references to "WSOCK32.dll" discarded by /OPT:REF
 
 
 
 <h3>Results</h3>
-ctsim.exe - 0 error(s), 0 warning(s)
+ctsim.exe - 0 error(s), 1 warning(s)
 </pre>
 </body>
 </html>
index c52282b0493056063ff8b0d5a0e0850a6c00a4c5..a2212e8e0cb3304e821fbe15901511de35f1ae58 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: ctsim.cpp,v 1.35 2001/01/18 21:30:22 kevin Exp $
+**  $Id: ctsim.cpp,v 1.36 2001/01/18 23:34:01 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -69,7 +69,7 @@
 #endif
 #endif
 
-static const char* rcsindent = "$Id: ctsim.cpp,v 1.35 2001/01/18 21:30:22 kevin Exp $";
+static const char* rcsindent = "$Id: ctsim.cpp,v 1.36 2001/01/18 23:34:01 kevin Exp $";
 
 struct option CTSimApp::ctsimOptions[] = 
 {
@@ -308,6 +308,16 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const
   m_dDefaultFilterInputScale = 1.;
   m_dDefaultFilterOutputScale = 1.;
   
+  wxAcceleratorEntry accelEntries[14];
+  accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('O'), wxID_OPEN);
+  accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('H'), MAINMENU_HELP_TOPICS);
+  accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('P'), MAINMENU_FILE_CREATE_PHANTOM);
+  accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('F'), MAINMENU_FILE_CREATE_FILTER);
+  accelEntries[4].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS);
+  for (i = 0; i < 10; i++)
+         accelEntries[i+4].Set (wxACCEL_CTRL, static_cast<int>('0'+i), MAINMENU_WINDOW_BASE+i);
+  wxAcceleratorTable accelTable (16, accelEntries);
+  SetAcceleratorTable (accelTable);
 }
 
 void 
@@ -444,6 +454,10 @@ MainFrame::OnUpdateUI (wxUpdateUIEvent& rEvent)
   while (iPos < MAX_WINDOW_MENUITEMS && pNode != NULL) {
     wxDocument* pDoc = static_cast<wxDocument*>(pNode->GetData());
     wxString strFilename = pDoc->GetFilename();
+       if (iPos < 10) {
+               strFilename += "\tCtrl-";
+               strFilename += static_cast<char>('0' + iPos);
+       }
     static_cast<wxMenuItemBase*>(m_apWindowMenuItems[iPos])->SetName (strFilename);
     m_apWindowMenuData[iPos] = pDoc;
     m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+iPos, true);
index 393e5f4f37fa1f046b03141a95866cccd5f91739..bc58da2dd3667a509058ed812574de1e7d0eafac 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: views.cpp,v 1.66 2001/01/18 21:30:22 kevin Exp $
+**  $Id: views.cpp,v 1.67 2001/01/18 23:34:01 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -778,7 +778,7 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   file_menu->Append(wxID_OPEN, "&Open...\tCtrl-O");
   file_menu->Append(wxID_SAVE, "&Save\tCtrl-S");
   file_menu->Append(wxID_SAVEAS, "Save &As...");
-  file_menu->Append(wxID_CLOSE, "&Close");
+  file_menu->Append(wxID_CLOSE, "&Close\tCtrl-W");
   
   file_menu->AppendSeparator();
   file_menu->Append(IFMENU_FILE_PROPERTIES, "P&roperties");
@@ -841,7 +841,7 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   
   wxMenu *help_menu = new wxMenu;
   help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
-  help_menu->Append(MAINMENU_HELP_TOPICS, "&Topics\tCtrl-T");
+  help_menu->Append(MAINMENU_HELP_TOPICS, "&Topics\tCtrl-H");
   help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
   
   wxMenuBar *menu_bar = new wxMenuBar;
@@ -857,17 +857,18 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   
   subframe->Centre(wxBOTH);
   
-  wxAcceleratorEntry accelEntries[9];
+  wxAcceleratorEntry accelEntries[10];
   accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('O'), wxID_OPEN);
   accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('S'), wxID_SAVE);
-  accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('T'), MAINMENU_HELP_TOPICS);
-  accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('P'), MAINMENU_FILE_CREATE_PHANTOM);
-  accelEntries[4].Set (wxACCEL_CTRL, static_cast<int>('F'), MAINMENU_FILE_CREATE_FILTER);
-  accelEntries[5].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS);
-  accelEntries[6].Set (wxACCEL_CTRL, static_cast<int>('A'), IFMENU_VIEW_SCALE_AUTO);
-  accelEntries[7].Set (wxACCEL_CTRL, static_cast<int>('U'), IFMENU_VIEW_SCALE_FULL);
-  accelEntries[8].Set (wxACCEL_CTRL, static_cast<int>('E'), IFMENU_VIEW_SCALE_MINMAX);
-  wxAcceleratorTable accelTable (9, accelEntries);
+  accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('W'), wxID_CLOSE);
+  accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('H'), MAINMENU_HELP_TOPICS);
+  accelEntries[4].Set (wxACCEL_CTRL, static_cast<int>('P'), MAINMENU_FILE_CREATE_PHANTOM);
+  accelEntries[5].Set (wxACCEL_CTRL, static_cast<int>('F'), MAINMENU_FILE_CREATE_FILTER);
+  accelEntries[6].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS);
+  accelEntries[7].Set (wxACCEL_CTRL, static_cast<int>('A'), IFMENU_VIEW_SCALE_AUTO);
+  accelEntries[8].Set (wxACCEL_CTRL, static_cast<int>('U'), IFMENU_VIEW_SCALE_FULL);
+  accelEntries[9].Set (wxACCEL_CTRL, static_cast<int>('E'), IFMENU_VIEW_SCALE_MINMAX);
+  wxAcceleratorTable accelTable (10, accelEntries);
   subframe->SetAcceleratorTable (accelTable);
 
   return subframe;
@@ -1888,9 +1889,9 @@ PhantomView::CreateChildFrame(wxDocument *doc, wxView *view)
 
   wxMenu *file_menu = new wxMenu;
   
-  file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...");
-  file_menu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...");
-  file_menu->Append(wxID_OPEN, "&Open...");
+  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(wxID_SAVEAS, "Save &As...");
   file_menu->Append(wxID_CLOSE, "&Close");
   
@@ -1903,12 +1904,12 @@ PhantomView::CreateChildFrame(wxDocument *doc, wxView *view)
   file_menu->Append(wxID_PREVIEW, "Print Pre&view");
   
   wxMenu *process_menu = new wxMenu;
-  process_menu->Append(PHMMENU_PROCESS_RASTERIZE, "&Rasterize...");
-  process_menu->Append(PHMMENU_PROCESS_PROJECTIONS, "&Projections...");
+  process_menu->Append(PHMMENU_PROCESS_RASTERIZE, "&Rasterize...\tCtrl-R");
+  process_menu->Append(PHMMENU_PROCESS_PROJECTIONS, "&Projections...\tCtrl-J");
   
   wxMenu *help_menu = new wxMenu;
-  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents");
-  help_menu->Append(MAINMENU_HELP_TOPICS, "&Topics");
+  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+  help_menu->Append(MAINMENU_HELP_TOPICS, "&Topics\tCtrl-H");
   help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
   
   wxMenuBar *menu_bar = new wxMenuBar;
@@ -1920,7 +1921,19 @@ PhantomView::CreateChildFrame(wxDocument *doc, wxView *view)
   subframe->SetMenuBar(menu_bar);
   
   subframe->Centre(wxBOTH);
-  
+
+  wxAcceleratorEntry accelEntries[8];
+  accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('O'), wxID_OPEN);
+  accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('S'), wxID_SAVE);
+  accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('H'), MAINMENU_HELP_TOPICS);
+  accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('P'), MAINMENU_FILE_CREATE_PHANTOM);
+  accelEntries[4].Set (wxACCEL_CTRL, static_cast<int>('F'), MAINMENU_FILE_CREATE_FILTER);
+  accelEntries[5].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS);
+  accelEntries[6].Set (wxACCEL_CTRL, static_cast<int>('J'), PHMMENU_PROCESS_PROJECTIONS);
+  accelEntries[7].Set (wxACCEL_CTRL, static_cast<int>('R'), PHMMENU_PROCESS_RASTERIZE);
+  wxAcceleratorTable accelTable (8, accelEntries);
+  subframe->SetAcceleratorTable (accelTable);
+
   return subframe;
 }
 
@@ -2245,12 +2258,12 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
 
   wxMenu *file_menu = new wxMenu;
   
-  file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...");
-  file_menu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...");
-  file_menu->Append(wxID_OPEN, "&Open...");
-  file_menu->Append(wxID_SAVE, "&Save");
+  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(wxID_SAVE, "&Save\tCtrl-S");
   file_menu->Append(wxID_SAVEAS, "Save &As...");
-  file_menu->Append(wxID_CLOSE, "&Close");
+  file_menu->Append(wxID_CLOSE, "&Close\tCtrl-W");
   
   file_menu->AppendSeparator();
   file_menu->Append(PJMENU_FILE_PROPERTIES, "P&roperties");
@@ -2261,16 +2274,16 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   file_menu->Append(wxID_PREVIEW, "Print Pre&view");
   
   wxMenu *convert_menu = new wxMenu;
-  convert_menu->Append (PJMENU_CONVERT_POLAR, "&Polar Image...");
-  convert_menu->Append (PJMENU_CONVERT_FFT_POLAR, "&FFT->Polar Image...");
+  convert_menu->Append (PJMENU_CONVERT_POLAR, "&Polar Image...\tCtrl-L");
+  convert_menu->Append (PJMENU_CONVERT_FFT_POLAR, "&FFT->Polar Image...\tCtrl-I");
   
   wxMenu *reconstruct_menu = new wxMenu;
-  reconstruct_menu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...");
-  reconstruct_menu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Fourier...");
+  reconstruct_menu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...\tCtrl-R");
+  reconstruct_menu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Fourier...\tCtrl-E");
 
   wxMenu *help_menu = new wxMenu;
-  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents");
-  help_menu->Append(MAINMENU_HELP_TOPICS, "&Topics");
+  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+  help_menu->Append(MAINMENU_HELP_TOPICS, "&Topics\tCtrl-H");
   help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
   
   wxMenuBar *menu_bar = new wxMenuBar;
@@ -2283,6 +2296,21 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   subframe->SetMenuBar(menu_bar);
   
   subframe->Centre(wxBOTH);
+
+  wxAcceleratorEntry accelEntries[11];
+  accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('O'), wxID_OPEN);
+  accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('S'), wxID_SAVE);
+  accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('W'), wxID_CLOSE);
+  accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('H'), MAINMENU_HELP_TOPICS);
+  accelEntries[4].Set (wxACCEL_CTRL, static_cast<int>('P'), MAINMENU_FILE_CREATE_PHANTOM);
+  accelEntries[5].Set (wxACCEL_CTRL, static_cast<int>('F'), MAINMENU_FILE_CREATE_FILTER);
+  accelEntries[6].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS);
+  accelEntries[7].Set (wxACCEL_CTRL, static_cast<int>('L'), PJMENU_CONVERT_POLAR);
+  accelEntries[8].Set (wxACCEL_CTRL, static_cast<int>('I'), PJMENU_CONVERT_FFT_POLAR);
+  accelEntries[9].Set (wxACCEL_CTRL, static_cast<int>('R'), PJMENU_RECONSTRUCT_FBP);
+  accelEntries[10].Set (wxACCEL_CTRL, static_cast<int>('E'), PJMENU_RECONSTRUCT_FOURIER);
+  wxAcceleratorTable accelTable (11, accelEntries);
+  subframe->SetAcceleratorTable (accelTable);
   
   return subframe;
 }
@@ -2534,12 +2562,12 @@ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view)
 
   wxMenu *file_menu = new wxMenu;
   
-  file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...");
-  file_menu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...");
-  file_menu->Append(wxID_OPEN, "&Open...");
-  file_menu->Append(wxID_SAVE, "&Save");
+  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(wxID_SAVE, "&Save\tCtrl-S");
   file_menu->Append(wxID_SAVEAS, "Save &As...");
-  file_menu->Append(wxID_CLOSE, "&Close");
+  file_menu->Append(wxID_CLOSE, "&Close\tCtrl-W");
   
   file_menu->AppendSeparator();
   file_menu->Append(PJMENU_FILE_PROPERTIES, "P&roperties");
@@ -2550,13 +2578,13 @@ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   file_menu->Append(wxID_PREVIEW, "Print Pre&view");
   
   wxMenu *view_menu = new wxMenu;
-  view_menu->Append(PLOTMENU_VIEW_SCALE_MINMAX, "Display Scale &Set...");
-  view_menu->Append(PLOTMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...");
-  view_menu->Append(PLOTMENU_VIEW_SCALE_FULL, "Display &Full Scale");
+  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");
   
   wxMenu *help_menu = new wxMenu;
-  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents");
-  help_menu->Append(MAINMENU_HELP_TOPICS, "&Topics");
+  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+  help_menu->Append(MAINMENU_HELP_TOPICS, "&Topics\tCtrl-H");
   help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
   
   wxMenuBar *menu_bar = new wxMenuBar;
@@ -2568,6 +2596,20 @@ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   subframe->SetMenuBar(menu_bar);
   
   subframe->Centre(wxBOTH);
+
+  wxAcceleratorEntry accelEntries[10];
+  accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('O'), wxID_OPEN);
+  accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('S'), wxID_SAVE);
+  accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('W'), wxID_CLOSE);
+  accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('H'), MAINMENU_HELP_TOPICS);
+  accelEntries[4].Set (wxACCEL_CTRL, static_cast<int>('P'), MAINMENU_FILE_CREATE_PHANTOM);
+  accelEntries[5].Set (wxACCEL_CTRL, static_cast<int>('F'), MAINMENU_FILE_CREATE_FILTER);
+  accelEntries[6].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS);
+  accelEntries[7].Set (wxACCEL_CTRL, static_cast<int>('E'), PLOTMENU_VIEW_SCALE_MINMAX);
+  accelEntries[8].Set (wxACCEL_CTRL, static_cast<int>('A'), PLOTMENU_VIEW_SCALE_AUTO);
+  accelEntries[9].Set (wxACCEL_CTRL, static_cast<int>('U'), PLOTMENU_VIEW_SCALE_FULL);
+  wxAcceleratorTable accelTable (10, accelEntries);
+  subframe->SetAcceleratorTable (accelTable);
   
   return subframe;
 }