// 'Main program' equivalent: the program execution "starts" here bool wxEmulatorApp::OnInit() { #if wxUSE_LOG wxLog::DisableTimestamp(); #endif // wxUSE_LOG wxInitAllImageHandlers(); wxString currentDir = wxGetCwd(); // Use argv to get current app directory m_appDir = wxFindAppPath(argv[0], currentDir, wxT("WXEMUDIR")); // If the development version, go up a directory. #ifdef __WXMSW__ if ((m_appDir.Right(5).CmpNoCase(wxT("DEBUG")) == 0) || (m_appDir.Right(11).CmpNoCase(wxT("DEBUGSTABLE")) == 0) || (m_appDir.Right(7).CmpNoCase(wxT("RELEASE")) == 0) || (m_appDir.Right(13).CmpNoCase(wxT("RELEASESTABLE")) == 0) ) m_appDir = wxPathOnly(m_appDir); #endif // Parse the command-line parameters and options wxCmdLineParser parser(sg_cmdLineDesc, argc, argv); int res; { wxLogNull log; res = parser.Parse(); } if (res == -1 || res > 0 || parser.Found(wxT("h"))) { #ifdef __X__ wxLog::SetActiveTarget(new wxLogStderr); #endif parser.Usage(); return false; } if (parser.Found(wxT("v"))) { #ifdef __X__ wxLog::SetActiveTarget(new wxLogStderr); #endif wxString msg; msg.Printf(wxT("wxWidgets PDA Emulator (c) Julian Smart, 2002 Version %.2f, %s"), wxEMULATOR_VERSION, __DATE__); wxLogMessage(msg); return false; } if (parser.Found(wxT("u"), & m_displayNumber)) { // Should only be number, so strip out anything before // and including a : character if (m_displayNumber.Find(wxT(':')) != -1) { m_displayNumber = m_displayNumber.AfterFirst(wxT(':')); } } if (parser.GetParamCount() == 0) { m_emulatorInfo.m_emulatorFilename = wxT("default.wxe"); } else if (parser.GetParamCount() > 0) { m_emulatorInfo.m_emulatorFilename = parser.GetParam(0); } // Load the emulation info if (!LoadEmulator(m_appDir)) { //wxMessageBox(wxT("Sorry, could not load this emulator. Please check bitmaps are valid.")); return false; } // create the main application window wxEmulatorFrame *frame = new wxEmulatorFrame(wxT("wxEmulator"), wxPoint(50, 50), wxSize(450, 340)); #if wxUSE_STATUSBAR frame->SetStatusText(m_emulatorInfo.m_emulatorTitle, 0); wxString sizeStr; sizeStr.Printf(wxT("Screen: %dx%d"), (int) m_emulatorInfo.m_emulatorScreenSize.x, (int) m_emulatorInfo.m_emulatorScreenSize.y); frame->SetStatusText(sizeStr, 1); #endif // wxUSE_STATUSBAR m_containerWindow = new wxEmulatorContainer(frame, wxID_ANY); frame->SetClientSize(m_emulatorInfo.m_emulatorDeviceSize.x, m_emulatorInfo.m_emulatorDeviceSize.y); // and show it (the frames, unlike simple controls, are not shown when // created initially) frame->Show(true); #ifdef __WXX11__ m_xnestWindow = new wxAdoptedWindow; wxString cmd; 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 m_xnestPID = wxExecute(cmd); if (0 == m_xnestPID) { frame->Destroy(); wxMessageBox(wxT("Sorry, could not run Xnest. Please check your PATH.")); return false; } wxReparenter reparenter; if (!reparenter.WaitAndReparent(m_containerWindow, m_xnestWindow, wxT("Xnest"))) { wxMessageBox(wxT("Sorry, could not reparent Xnest..")); frame->Destroy(); return false; } #endif m_containerWindow->DoResize(); // success: wxApp::OnRun() will be called which will enter the main message // loop and the application will run. If we returned false here, the // application would exit immediately. return true; }
bool MyApp::OnInit( void ) { try { SetAppName( APP_NAME ); SetVendorName( APP_VENDOR ); respath = wxFindAppPath( argv[0], wxGetCwd(), _T("FNPATH"), _T("fn") ); #ifdef __WXMSW__ if (respath.Last() != '\\') respath += '\\'; shaderPath = respath + _T("GLSL\\"); iconsPath = respath + _T("icons\\"); int fd; FILE *fp; AllocConsole(); fd = _open_osfhandle( (long)GetStdHandle( STD_OUTPUT_HANDLE ), 0); fp = _fdopen( fd, "w" ); *stdout = *fp; setvbuf( stdout, NULL, _IONBF, 0 ); // TODO fix may not work. #elif __WXMAC__ // If we use the above code to get the same on OSX, I get a segfault somewhere // therefore I use the OSX native code here: // OSX only: Try to find the resource path... CFBundleRef mainBundle = CFBundleGetMainBundle(); CFURLRef resourcesURL = CFBundleCopyBundleURL( mainBundle ); CFStringRef str = CFURLCopyFileSystemPath( resourcesURL, kCFURLPOSIXPathStyle ); CFRelease( resourcesURL ); char path[ PATH_MAX ]; CFStringGetCString( str, path, FILENAME_MAX, kCFStringEncodingASCII ); CFRelease( str ); fprintf( stderr, "%s", path ); respath = wxString::FromAscii( path ); respath += _T( "/Contents/Resources/" ); shaderPath = respath + _T( "GLSL/" ); iconsPath = respath + _T( "icons/" ); std::cout << std::endl << iconsPath << std::endl; #else if ( respath.Last() != '/' ) respath += '/'; shaderPath = respath + _T("GLSL/"); iconsPath = respath + _T("icons/"); #endif Logger::getInstance()->print( wxT( "Warning: This version of Fibernavigator is debug compiled." ), LOGLEVEL_DEBUG ); Logger::getInstance()->print( wxT( "For better performance please compile a Release version."), LOGLEVEL_DEBUG ); Logger::getInstance()->print( wxString::Format( wxT( "respath: %s" ), respath.c_str() ), LOGLEVEL_DEBUG ); Logger::getInstance()->print( wxString::Format( wxT( "shader: %s" ), shaderPath.c_str() ), LOGLEVEL_DEBUG ); // Create the main frame window frame = new MainFrame( wxT("Fiber Navigator"), wxPoint( 50, 50 ), wxSize( 800, 600 ) ); SceneManager::getInstance()->setMainFrame( frame ); SceneManager::getInstance()->setTreeCtrl( frame->m_pTreeWidget ); #ifdef __WXMSW__ // Give it an icon (this is ignored in MDI mode: uses resources) frame->SetIcon( wxIcon( _T( "sashtest_icn" ) ) ); #endif frame->SetMinSize( wxSize( 800, 600 ) ); frame->SetSize( wxSize( 1024, 768 ) ); frame->Show( true ); SetTopWindow( frame ); wxString cmd; wxString cmdFileName; wxCmdLineParser cmdParser( desc, argc, argv ); cmdParser.Parse( false ); if ( cmdParser.GetParamCount() > 0 ) { Loader loader = Loader(frame, frame->m_pListCtrl ); for ( size_t i = 0; i < cmdParser.GetParamCount(); ++i ) { cmd = cmdParser.GetParam( i ); wxFileName fName( cmd ); fName.Normalize( wxPATH_NORM_LONG | wxPATH_NORM_DOTS | wxPATH_NORM_TILDE | wxPATH_NORM_ABSOLUTE ); cmdFileName = fName.GetFullPath(); if ( cmdParser.Found(_T("d")) && ( i == 0 ) ) { loader( cmdFileName ); frame->createDistanceMapAndIso(); } else if ( cmdParser.Found( _T( "p" ) ) && ( i == cmdParser.GetParamCount() -1 ) ) { frame->screenshot( wxT( "" ), cmdFileName ); } else { loader( cmdFileName ); } } } if ( cmdParser.Found( _T( "e" ) ) ) { exit( 0 ); } return true; } catch ( ... ) { Logger::getInstance()->print( wxT( "Something went wrong, terribly wrong" ), LOGLEVEL_ERROR ); return false; } Logger::getInstance()->print( wxT( "End on init main" ), LOGLEVEL_DEBUG ); wxFrame *the_frame = new wxFrame(NULL, 1, argv[0]); the_frame->Show(true); return true; }