branch:
details: http://hugin.hg.sourceforge.net/hgweb/hugin/hugin/hgrepo/h/hu/hugin/hugin/rev/dcbac52da361
changeset: 5186:dcbac52da361
user: tmodes
date: Sat Apr 30 17:12:08 2011 +0200
description:
Added calibrate_lens_gui
Refactored and clean up lines detecting code
Move some lens specific code into huginbasewx
diffstat:
src/hugin1/CMakeLists.txt | 1 +
src/hugin1/base_wx/CMakeLists.txt | 4 +-
src/hugin1/base_wx/LensTools.cpp | 125 ++++
src/hugin1/base_wx/LensTools.h | 44 +
src/hugin1/calibrate_lens/CMakeLists.txt | 14 +
src/hugin1/calibrate_lens/LensCalApp.cpp | 216 ++++++
src/hugin1/calibrate_lens/LensCalApp.h | 73 ++
src/hugin1/calibrate_lens/LensCalFrame.cpp | 829 ++++++++++++++++++++++++++
src/hugin1/calibrate_lens/LensCalFrame.h | 130 ++++
src/hugin1/calibrate_lens/LensCalImageCtrl.cpp | 356 +++++++++++
src/hugin1/calibrate_lens/LensCalImageCtrl.h | 130 ++++
src/hugin1/calibrate_lens/LensCalTypes.cpp | 100 +++
src/hugin1/calibrate_lens/LensCalTypes.h | 72 ++
src/hugin1/calibrate_lens/calibrate_lens_gui_rc.rc | 15 +
src/hugin1/hugin/AssistantPanel.cpp | 2 +-
src/hugin1/hugin/HFOVDialog.cpp | 34 +-
src/hugin1/hugin/HFOVDialog.h | 8 -
src/hugin1/hugin/LensPanel.cpp | 76 +--
src/hugin1/hugin/xrc/CMakeLists.txt | 3 +-
src/hugin1/hugin/xrc/lenscal_frame.xrc | 462 ++++++++++++++
src/hugin_base/CMakeLists.txt | 1 +
src/hugin_base/lines/CMakeLists.txt | 18 +
src/hugin_base/lines/FindLines.cpp | 145 ++++
src/hugin_base/lines/FindLines.h | 72 ++
src/hugin_base/lines/FindN8Lines.cpp | 619 +++++++++++++++++++
src/hugin_base/lines/FindN8Lines.h | 59 +
src/hugin_base/lines/LinesTypes.h | 52 +
src/hugin_shared.h | 7 +
28 files changed, 3551 insertions(+), 116 deletions(-)
diffs (truncated from 3877 to 500 lines):
diff -r c40f6f7e5fd3 -r dcbac52da361 src/hugin1/CMakeLists.txt
--- a/src/hugin1/CMakeLists.txt Thu Apr 28 21:06:00 2011 +0200
+++ b/src/hugin1/CMakeLists.txt Sat Apr 30 17:12:08 2011 +0200
@@ -21,6 +21,7 @@
ENDIF(OPENGL_FOUND)
add_subdirectory(nona_gui)
add_subdirectory(ptbatcher)
+ add_subdirectory(calibrate_lens)
ENDIF(wxWidgets_FOUND)
IF(VIPS_FOUND)
diff -r c40f6f7e5fd3 -r dcbac52da361 src/hugin1/base_wx/CMakeLists.txt
--- a/src/hugin1/base_wx/CMakeLists.txt Thu Apr 28 21:06:00 2011 +0200
+++ b/src/hugin1/base_wx/CMakeLists.txt Sat Apr 30 17:12:08 2011 +0200
@@ -1,10 +1,10 @@
SET(HUGIN_WX_BASE_SRC wxImageCache.cpp MyProgressDialog.cpp PTWXDlg.cpp
huginConfig.cpp MyExternalCmdExecDialog.cpp platform.cpp
- RunStitchPanel.cpp )
+ RunStitchPanel.cpp LensTools.cpp)
SET(HUGIN_WX_BASE_HEADER wxImageCache.h MyProgressDialog.h PTWXDlg.h
huginConfig.h MyExternalCmdExecDialog.h platform.h
- RunStitchPanel.h )
+ RunStitchPanel.h LensTools.h)
IF (${HUGIN_SHARED_LIBS})
diff -r c40f6f7e5fd3 -r dcbac52da361 src/hugin1/base_wx/LensTools.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hugin1/base_wx/LensTools.cpp Sat Apr 30 17:12:08 2011 +0200
@@ -0,0 +1,125 @@
+// -*- c-basic-offset: 4 -*-
+/** @file LensTools.cpp
+ *
+ * @brief some helper classes for working with lenses
+ *
+ * @author T. Modes
+ *
+ */
+
+/* This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "panoinc_WX.h"
+#include "panoinc.h"
+#include "LensTools.h"
+#include <algorithm>
+
+using namespace std;
+
+void FillLensProjectionList(wxControlWithItems* list)
+{
+ list->Clear();
+ list->Append(_("Normal (rectilinear)"),(void*)HuginBase::SrcPanoImage::RECTILINEAR);
+ list->Append(_("Panoramic (cylindrical)"),(void*)HuginBase::SrcPanoImage::PANORAMIC);
+ list->Append(_("Circular fisheye"),(void*)HuginBase::SrcPanoImage::CIRCULAR_FISHEYE);
+ list->Append(_("Full frame fisheye"),(void*)HuginBase::SrcPanoImage::FULL_FRAME_FISHEYE);
+ list->Append(_("Equirectangular"),(void*)HuginBase::SrcPanoImage::EQUIRECTANGULAR);
+ list->Append(_("Orthographic"),(void*)HuginBase::SrcPanoImage::FISHEYE_ORTHOGRAPHIC);
+ list->Append(_("Stereographic"),(void*)HuginBase::SrcPanoImage::FISHEYE_STEREOGRAPHIC);
+ list->Append(_("Equisolid"),(void*)HuginBase::SrcPanoImage::FISHEYE_EQUISOLID);
+ list->Append(_("Fisheye Thoby"),(void*)HuginBase::SrcPanoImage::FISHEYE_THOBY);
+ list->SetSelection(0);
+};
+
+void SelectProjection(wxControlWithItems* list,size_t new_projection)
+{
+ for(unsigned int i=0;i<list->GetCount();i++)
+ {
+ if((size_t)list->GetClientData(i)==new_projection)
+ {
+ list->SetSelection(i);
+ return;
+ };
+ };
+ list->SetSelection(0);
+};
+
+size_t GetSelectedProjection(wxControlWithItems* list)
+{
+ return (size_t)(list->GetClientData(list->GetSelection()));
+};
+
+void SaveLensParameters(const wxString filename, HuginBase::Panorama* pano, unsigned int imgNr)
+{
+ HuginBase::StandardImageVariableGroups variable_groups(*pano);
+ const HuginBase::Lens & lens = variable_groups.getLensForImage(imgNr);
+ const HuginBase::VariableMap & vars = pano->getImageVariables(imgNr);
+ // get the variable map
+ char * p = setlocale(LC_NUMERIC,NULL);
+ char * old_locale = strdup(p);
+ setlocale(LC_NUMERIC,"C");
+ wxFileConfig cfg(wxT("hugin lens file"),wxT(""),filename);
+ cfg.Write(wxT("Lens/image_width"), (long) lens.getImageSize().x);
+ cfg.Write(wxT("Lens/image_height"), (long) lens.getImageSize().y);
+ cfg.Write(wxT("Lens/type"), (long) lens.getProjection());
+ cfg.Write(wxT("Lens/hfov"), const_map_get(vars,"v").getValue());
+ cfg.Write(wxT("Lens/hfov_link"), const_map_get(lens.variables,"v").isLinked() ? 1:0);
+ cfg.Write(wxT("Lens/crop"), lens.getCropFactor());
+
+ // loop to save lens variables
+ const char ** varname = HuginBase::Lens::variableNames;
+ while (*varname)
+ {
+ if (string(*varname) == "Eev")
+ {
+ varname++;
+ continue;
+ }
+ wxString key(wxT("Lens/"));
+ key.append(wxString(*varname, wxConvLocal));
+ cfg.Write(key, const_map_get(vars,*varname).getValue());
+ key.append(wxT("_link"));
+ cfg.Write(key, const_map_get(lens.variables,*varname).isLinked() ? 1:0);
+ varname++;
+ }
+
+ HuginBase::SrcPanoImage image = pano->getSrcImage(imgNr);
+ cfg.Write(wxT("Lens/crop/enabled"), image.getCropMode()==HuginBase::SrcPanoImage::NO_CROP ? 0l : 1l);
+ cfg.Write(wxT("Lens/crop/autoCenter"), image.getAutoCenterCrop() ? 1l : 0l);
+ vigra::Rect2D cropRect=image.getCropRect();
+ cfg.Write(wxT("Lens/crop/left"), cropRect.left());
+ cfg.Write(wxT("Lens/crop/top"), cropRect.top());
+ cfg.Write(wxT("Lens/crop/right"), cropRect.right());
+ cfg.Write(wxT("Lens/crop/bottom"), cropRect.bottom());
+
+ if (image.hasEXIFread())
+ {
+ // write exif data to ini file
+ cfg.Write(wxT("EXIF/CameraMake"), wxString(image.getExifMake().c_str(), wxConvLocal));
+ cfg.Write(wxT("EXIF/CameraModel"), wxString(image.getExifModel().c_str(), wxConvLocal));
+ cfg.Write(wxT("EXIF/FocalLength"), image.getExifFocalLength());
+ cfg.Write(wxT("EXIF/Aperture"), image.getExifAperture());
+ cfg.Write(wxT("EXIF/ISO"), image.getExifISO());
+ cfg.Write(wxT("EXIF/CropFactor"), image.getExifCropFactor());
+ cfg.Write(wxT("EXIF/Distance"), image.getExifDistance());
+ }
+ cfg.Flush();
+
+ // reset locale
+ setlocale(LC_NUMERIC,old_locale);
+ free(old_locale);
+};
diff -r c40f6f7e5fd3 -r dcbac52da361 src/hugin1/base_wx/LensTools.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hugin1/base_wx/LensTools.h Sat Apr 30 17:12:08 2011 +0200
@@ -0,0 +1,44 @@
+// -*- c-basic-offset: 4 -*-
+/** @file LensTools.h
+ *
+ * @brief some helper classes for working with lenses
+ *
+ * @author T. Modes
+ *
+ */
+
+/*
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef LENSTOOLS_H
+#define LENSTOOLS_H
+
+#include <hugin_shared.h>
+#include "panoinc_WX.h"
+#include "panoinc.h"
+
+/** Fills a wxControlWithItem with all input projection formats,
+ * the client data contains the associated projection number */
+WXIMPEX void FillLensProjectionList(wxControlWithItems* list);
+/** Selects the given projection in the given list item */
+WXIMPEX void SelectProjection(wxControlWithItems* list,size_t new_projection);
+/** Returns the selected projection number from list */
+WXIMPEX size_t GetSelectedProjection(wxControlWithItems* list);
+/** save the lens parameters of the image to a lens file named filename */
+WXIMPEX void SaveLensParameters(const wxString filename, HuginBase::Panorama* pano, unsigned int imgNr);
+
+#endif // LENSTOOLS_H
diff -r c40f6f7e5fd3 -r dcbac52da361 src/hugin1/calibrate_lens/CMakeLists.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hugin1/calibrate_lens/CMakeLists.txt Sat Apr 30 17:12:08 2011 +0200
@@ -0,0 +1,14 @@
+
+set(CALLENSGUI_SOURCE LensCalApp.cpp LensCalFrame.cpp LensCalImageCtrl.cpp LensCalTypes.cpp)
+set(CALLENSGUI_HEADER LensCalApp.h LensCalFrame.h LensCalImageCtrl.h LensCalTypes.h)
+
+IF (WIN32)
+ add_executable(calibrate_lens_gui WIN32 ${CALLENSGUI_SOURCE} ${CALLENSGUI_HEADER} calibrate_lens_gui_rc.rc)
+ELSE (WIN32)
+ add_executable(calibrate_lens_gui ${CALLENSGUI_SOURCE} ${CALLENSGUI_HEADER})
+ENDIF (WIN32)
+
+
+target_link_libraries(calibrate_lens_gui huginbasewx ${common_libs} ${image_libs} ${wxWidgets_LIBRARIES} huginlines)
+
+INSTALL(TARGETS calibrate_lens_gui DESTINATION ${BINDIR})
diff -r c40f6f7e5fd3 -r dcbac52da361 src/hugin1/calibrate_lens/LensCalApp.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hugin1/calibrate_lens/LensCalApp.cpp Sat Apr 30 17:12:08 2011 +0200
@@ -0,0 +1,216 @@
+// -*- c-basic-offset: 4 -*-
+/** @file LensCalApp.cpp
+ *
+ * @brief implementation of LensCal application class
+ *
+ * @author T. Modes
+ *
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "panoinc_WX.h"
+#include "panoinc.h"
+#include "LensCalApp.h"
+#include "LensCalImageCtrl.h"
+#include "base_wx/huginConfig.h"
+#include "hugin/config_defaults.h"
+#include "base_wx/PTWXDlg.h"
+
+#include <tiffio.h>
+
+// make wxwindows use this class as the main application
+IMPLEMENT_APP(LensCalApp)
+BEGIN_EVENT_TABLE(LensCalApp, wxApp)
+END_EVENT_TABLE()
+
+bool LensCalApp::OnInit()
+{
+ SetAppName(wxT("hugin"));
+ // register our custom pano tools dialog handlers
+ registerPTWXDlgFcn();
+
+#if defined __WXMSW__
+ wxString huginExeDir = getExePath(argv[0]);
+ wxString huginRoot;
+ wxFileName::SplitPath( huginExeDir, &huginRoot, NULL, NULL );
+ m_xrcPrefix = huginRoot + wxT("/share/hugin/xrc/");
+ // locale setup
+ locale.AddCatalogLookupPathPrefix(huginRoot + wxT("/share/locale"));
+#elif defined __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE
+ // initialize paths
+ wxString thePath = MacGetPathToBundledResourceFile(CFSTR("xrc"));
+ if (thePath == wxT("")) {
+ wxMessageBox(_("xrc directory not found in bundle"), _("Fatal Error"));
+ return false;
+ }
+ m_xrcPrefix = thePath + wxT("/");
+ wxString thePath = MacGetPathToBundledResourceFile(CFSTR("locale"));
+ if(thePath != wxT(""))
+ locale.AddCatalogLookupPathPrefix(thePath);
+ else {
+ wxMessageBox(_("Translations not found in bundle"), _("Fatal Error"));
+ return false;
+ }
+#else
+ // add the locale directory specified during configure
+ m_xrcPrefix = wxT(INSTALL_XRC_DIR);
+ locale.AddCatalogLookupPathPrefix(wxT(INSTALL_LOCALE_DIR));
+#endif
+
+ if ( ! wxFile::Exists(m_xrcPrefix + wxT("/lenscal_frame.xrc")) )
+ {
+ wxMessageBox(_("xrc directory not found, hugin needs to be properly installed\nTried Path:" + m_xrcPrefix ), _("Fatal Error"));
+ return false;
+ }
+
+ // here goes and comes configuration
+ wxConfigBase * config = wxConfigBase::Get();
+ // do not record default values in the preferences file
+ config->SetRecordDefaults(false);
+ config->Flush();
+
+ // initialize i18n
+ int localeID = config->Read(wxT("language"), (long) HUGIN_LANGUAGE);
+ DEBUG_TRACE("localeID: " << localeID);
+ {
+ bool bLInit;
+ bLInit = locale.Init(localeID);
+ if (bLInit) {
+ DEBUG_TRACE("locale init OK");
+ DEBUG_TRACE("System Locale: " << locale.GetSysName().mb_str(wxConvLocal))
+ DEBUG_TRACE("Canonical Locale: " << locale.GetCanonicalName().mb_str(wxConvLocal))
+ } else {
+ DEBUG_TRACE("locale init failed");
+ }
+ }
+
+ // set the name of locale recource to look for
+ locale.AddCatalog(wxT("hugin"));
+
+ // initialize image handlers
+ wxInitAllImageHandlers();
+
+ // Initialize all the XRC handlers.
+ wxXmlResource::Get()->InitAllHandlers();
+ wxXmlResource::Get()->AddHandler(new LensCalImageCtrlXmlHandler());
+ // load XRC files
+ wxXmlResource::Get()->Load(m_xrcPrefix + wxT("lenscal_frame.xrc"));
+
+ // create main frame
+ m_frame = new LensCalFrame(NULL);
+ SetTopWindow(m_frame);
+
+ // setup main frame size, after it has been created.
+ RestoreFramePosition(m_frame, wxT("LensCalFrame"));
+
+ // show the frame.
+ m_frame->Show(TRUE);
+
+ // suppress tiff warnings
+ TIFFSetWarningHandler(0);
+
+ return true;
+}
+
+// utility functions
+void RestoreFramePosition(wxTopLevelWindow * frame, const wxString & basename)
+{
+ DEBUG_TRACE(basename.mb_str(wxConvLocal));
+ wxConfigBase * config = wxConfigBase::Get();
+
+ // get display size
+ int dx,dy;
+ wxDisplaySize(&dx,&dy);
+
+#if ( __WXGTK__ ) && wxCHECK_VERSION(2,6,0)
+// restoring the splitter positions properly when maximising doesn't work.
+// Disabling maximise on wxWidgets >= 2.6.0 and gtk
+ //size
+ int w = config->Read(wxT("/") + basename + wxT("/width"),-1l);
+ int h = config->Read(wxT("/") + basename + wxT("/height"),-1l);
+ if (w > 0 && w <= dx) {
+ frame->SetClientSize(w,h);
+ } else {
+ frame->Fit();
+ }
+ //position
+ int x = config->Read(wxT("/") + basename + wxT("/positionX"),-1l);
+ int y = config->Read(wxT("/") + basename + wxT("/positionY"),-1l);
+ if ( y >= 0 && x >= 0 && x < dx && y < dy) {
+ frame->Move(x, y);
+ } else {
+ frame->Move(0, 44);
+ }
+#else
+ bool maximized = config->Read(wxT("/") + basename + wxT("/maximized"), 0l) != 0;
+ if (maximized) {
+ frame->Maximize();
+ } else {
+ //size
+ int w = config->Read(wxT("/") + basename + wxT("/width"),-1l);
+ int h = config->Read(wxT("/") + basename + wxT("/height"),-1l);
+ if (w > 0 && w <= dx) {
+ frame->SetClientSize(w,h);
+ } else {
+ frame->Fit();
+ }
+ //position
+ int x = config->Read(wxT("/") + basename + wxT("/positionX"),-1l);
+ int y = config->Read(wxT("/") + basename + wxT("/positionY"),-1l);
+ if ( y >= 0 && x >= 0 && x < dx && y < dy) {
+ frame->Move(x, y);
+ } else {
+ frame->Move(0, 44);
+ }
+ }
+#endif
+}
+
+
+void StoreFramePosition(wxTopLevelWindow * frame, const wxString & basename)
+{
+ DEBUG_TRACE(basename);
+
+ wxConfigBase * config = wxConfigBase::Get();
+
+#if ( __WXGTK__ ) && wxCHECK_VERSION(2,6,0)
+// restoring the splitter positions properly when maximising doesn't work.
+// Disabling maximise on wxWidgets >= 2.6.0 and gtk
+
+ wxSize sz = frame->GetClientSize();
+ config->Write(wxT("/") + basename + wxT("/width"), sz.GetWidth());
+ config->Write(wxT("/") + basename + wxT("/height"), sz.GetHeight());
+ wxPoint ps = frame->GetPosition();
+ config->Write(wxT("/") + basename + wxT("/positionX"), ps.x);
+ config->Write(wxT("/") + basename + wxT("/positionY"), ps.y);
+ config->Write(wxT("/") + basename + wxT("/maximized"), 0);
+#else
+ if ( (! frame->IsMaximized()) && (! frame->IsIconized()) ) {
+ wxSize sz = frame->GetClientSize();
+ config->Write(wxT("/") + basename + wxT("/width"), sz.GetWidth());
+ config->Write(wxT("/") + basename + wxT("/height"), sz.GetHeight());
+ wxPoint ps = frame->GetPosition();
+ config->Write(wxT("/") + basename + wxT("/positionX"), ps.x);
+ config->Write(wxT("/") + basename + wxT("/positionY"), ps.y);
+ config->Write(wxT("/") + basename + wxT("/maximized"), 0);
+ } else if (frame->IsMaximized()){
+ config->Write(wxT("/") + basename + wxT("/maximized"), 1l);
+ }
+#endif
+}
diff -r c40f6f7e5fd3 -r dcbac52da361 src/hugin1/calibrate_lens/LensCalApp.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hugin1/calibrate_lens/LensCalApp.h Sat Apr 30 17:12:08 2011 +0200
@@ -0,0 +1,73 @@
+// -*- c-basic-offset: 4 -*-
+/** @file LensCalApp.h
+ *
+ * @author T. Modes
+ *
+ * @brief declaration of application class for lens calibrate application
+ *
+ */
+
+/*
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef LENSCALAPP_H
+#define LENSCALAPP_H
+
+#include <wx/wx.h>
+#include <huginapp/ImageCache.h>
+
+#include "LensCalFrame.h"
+
+/** Store window size and position in configfile/registry */
+void StoreFramePosition(wxTopLevelWindow * frame, const wxString & basename);
+/** Restore window size and position from configfile/registry */
+void RestoreFramePosition(wxTopLevelWindow * frame, const wxString & basename);
+
+/** The application class for lens_calibrate_gui .
+ */
+class LensCalApp : public wxApp
+{
+public:
+ virtual bool OnInit();
+
+ /** return currently active locale */
+ wxLocale & GetLocale()
+ {
+ return locale;
+ }
+ /** return the current xrc path */
+ const wxString & GetXRCPath()
+ {
|