Move XRC pointer checking/error throwing to a templated function (More backporting from Arthur, next few commits will be importing his improvements)

This commit is contained in:
wowzaman12 2015-03-28 01:12:57 +00:00
parent 54eac49a59
commit 76ef5906a0
1 changed files with 16 additions and 7 deletions

View File

@ -7,6 +7,7 @@
#include "wxvbam.h"
#include <typeinfo>
#include <stdexcept>
#include <wx/stockitem.h>
@ -1942,19 +1943,27 @@ 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() */