Move XRC pointer checking/error throwing to a templated function

This commit is contained in:
Arthur Moore 2015-01-10 18:56:38 -05:00
parent 30876d227e
commit 3d81d52a60
1 changed files with 17 additions and 7 deletions

View File

@ -7,6 +7,7 @@
#include "wxvbam.h"
#include <typeinfo>
#include <stdexcept>
#include <wx/stockitem.h>
@ -2051,19 +2052,28 @@ public:
} throttle_ctrl;
/////////////////////////////
///Check if a pointer from the XRC file is valid. If it's not, throw an error telling the user.
template <typename T>
void CheckThrowXRCError(T pointer,std::string name)
{
if(pointer == NULL)
{
std::string errormessage = "Unable to load a ";
errormessage+=typeid(pointer).name();
errormessage+=" from the builtin xrc file: ";
errormessage+=name;
throw std::runtime_error(errormessage);
}
}
wxDialog * MainFrame::LoadXRCDialog(const char * name)
{
wxString dname = wxString::FromUTF8(name);
/* using this instead of LoadDialog() allows non-wxDialog classes that */
/* are derived from wxDialog (like wxPropertySheetDialog) to work */
wxDialog * dialog = wxDynamicCast(wxXmlResource::Get()->LoadObject(this, dname, wxEmptyString), wxDialog);
if(!dialog)
{
std::string errormessage = "Unable to load a dialog from the builtin xrc file: ";
errormessage+=name;
throw std::runtime_error(errormessage);
return NULL;
}
CheckThrowXRCError(dialog,name);
/* wx-2.9.1 doesn't set parent for propertysheetdialogs for some reason */
/* this will generate a gtk warning but it is necessary for later */
/* retrieval using FindWindow() */