#include "../xvaga/wxinc.h"

#include "xvt.h"

#include <wx/filename.h>
#include <wx/snglinst.h>

extern int xvt_main(int argc, char** argv);

class TMainApp : public wxApp
{
	wxSingleInstanceChecker* m_sic;

protected:
	virtual bool OnInit();
  virtual int OnExit();
  void OnTimer(wxTimerEvent& evt);

  DECLARE_EVENT_TABLE()
  DECLARE_DYNAMIC_CLASS(TMainApp);
};

IMPLEMENT_DYNAMIC_CLASS(TMainApp, wxApp)

IMPLEMENT_APP(TMainApp)

#define TIMER_ID 883

BEGIN_EVENT_TABLE(TMainApp, wxApp)
  EVT_TIMER(TIMER_ID, TMainApp::OnTimer)
END_EVENT_TABLE()

void TMainApp::OnTimer(wxTimerEvent& evt)
{
  xvt_app_pre_create();
  xvt_main(argc, argv);
}

bool TMainApp::OnInit()
{
  const wxFileName strWrk = argv[0];
  const wxString strApp = strWrk.GetName().Lower();
  m_sic = new wxSingleInstanceChecker(strApp);

  // Non eseguo direttamente xvt_main per dar modo al main event loop di partire
	wxTimerEvent evt(TIMER_ID);
	AddPendingEvent(evt);
	return true;
}

int TMainApp::OnExit()
{
  delete m_sic;
  m_sic = NULL;

  return wxApp::OnExit();
}