#include "forty.h"
#include "card.h"
-#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__)
+#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXX11__)
#include "pictures.xpm"
#include "symbols.xbm"
#endif
BEGIN_EVENT_TABLE(wxEmulatorFrame, wxFrame)
EVT_MENU(Emulator_Quit, wxEmulatorFrame::OnQuit)
EVT_MENU(Emulator_About, wxEmulatorFrame::OnAbout)
+ EVT_CLOSE(wxEmulatorFrame::OnCloseWindow)
END_EVENT_TABLE()
// Create a new application object: this macro will allow wxWindows to create
m_xnestWindow = NULL;
m_containerWindow = NULL;
m_displayNumber = wxT("100");
+ m_xnestPID = 0;
+
}
// 'Main program' equivalent: the program execution "starts" here
bool wxEmulatorApp::OnInit()
{
+ wxLog::SetTimestamp(NULL);
wxInitAllImageHandlers();
wxString currentDir = wxGetCwd();
m_xnestWindow = new wxAdoptedWindow;
wxString cmd;
- cmd.Printf(wxT("Xnest %s -geometry %dx%d"),
+ cmd.Printf(wxT("Xnest :%s -geometry %dx%d"),
m_displayNumber.c_str(),
(int) m_emulatorInfo.m_emulatorScreenSize.x,
(int) m_emulatorInfo.m_emulatorScreenSize.y);
- // Asynchronously executes Xnest
- if (0 == wxExecute(cmd))
+ // Asynchronously executes Xnest
+ m_xnestPID = wxExecute(cmd);
+ if (0 == m_xnestPID)
{
frame->Destroy();
wxMessageBox(wxT("Sorry, could not run Xnest. Please check your PATH."));
wxMessageBox(msg, _T("About wxEmulator"), wxOK | wxICON_INFORMATION, this);
}
+void wxEmulatorFrame::OnCloseWindow(wxCloseEvent& event)
+{
+#ifdef __WXX11__
+ if (wxGetApp().m_xnestWindow)
+ {
+ wxGetApp().m_xnestWindow->SetHandle((WXWindow) NULL);
+ }
+#endif
+ this->Destroy();
+ if (wxGetApp().m_xnestPID > 0)
+ {
+ wxKill(wxGetApp().m_xnestPID);
+ wxGetApp().m_xnestPID = 0;
+ }
+}
+
IMPLEMENT_CLASS(wxEmulatorContainer, wxWindow)
BEGIN_EVENT_TABLE(wxEmulatorContainer, wxWindow)
void wxEmulatorContainer::DoResize()
{
wxSize sz = GetClientSize();
- if (wxGetApp().m_xnestWindow)
+ if (wxGetApp().m_xnestWindow
+#ifdef __WXX11__
+ && wxGetApp().m_xnestWindow->GetMainWindow()
+#endif
+ )
{
int deviceWidth = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.x;
int deviceHeight = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.y;
wxEmulatorContainer* m_containerWindow;
wxString m_appDir;
wxString m_displayNumber;
+ long m_xnestPID;
};
// The container for the Xnest window. The decorations
// ctor(s)
wxEmulatorFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
- // event handlers (these functions should _not_ be virtual)
+ // event handlers
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
+ void OnCloseWindow(wxCloseEvent& event);
private:
// any class wishing to process wxWindows events must use this macro
--- /dev/null
+/* XPM */
+static char * emulator_xpm[] = {
+"32 32 17 1",
+"( c #000000",
+". c #000000",
+"+ c #008484",
+"@ c #848484",
+"# c #A5A5A5",
+"$ c None",
+"% c #FFFFF7",
+"& c #FFFFFF",
+"* c #FFFFFF",
+"= c #FFFFFF",
+"- c #FFFFFF",
+"; c #FFFFFF",
+"> c #FFFFFF",
+", c #FFFFFF",
+"' c #FFFFFF",
+") c #FFFFFF",
+"! c #FFFFFF",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$%%%%%%%%%%%%%%%%%%%%%%%&@$$$$",
+"$$$%######################@.$$$$",
+"$$$%######################@.$$$$",
+"$$$%##++++++++++++++++++##@.$$$$",
+"$$$%##++++++++++++++++++##@.$$.$",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%##++++++++++++++++++##@.$&.#",
+"$$$%######################@.$&.#",
+"$$$%######################@.$&.#",
+"$$$%##@####@##########@###@.$&.#",
+"$$$%#@@@##@@@########@@@##@.$&.#",
+"$$$%##@####@##########@###@.$&.#",
+"$$$%######################@.$&.#",
+"$$$&@@@@@@@@@@@@@@@@@@@@@@@.$&.#",
+"$$$@........................$$$$"};