| /* | |
| * Copyright (C) 2014 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| #include "stdafx.h" | |
| #include "WinLauncher2App.h" | |
| #include "utils.h" | |
| #include "JavaFinder.h" | |
| #include "FindJava2Dlg.h" | |
| #ifdef _DEBUG | |
| #define new DEBUG_NEW | |
| #endif | |
| // CWinLauncher2App | |
| BEGIN_MESSAGE_MAP(CWinLauncher2App, CWinApp) | |
| ON_COMMAND(ID_HELP, &CWinApp::OnHelp) | |
| END_MESSAGE_MAP() | |
| // The one and only CWinLauncher2App object | |
| CWinLauncher2App theApp; | |
| class CLauncherCmdLineInfo : public CCommandLineInfo { | |
| public: | |
| bool mDoHelp; | |
| bool mDoForceUi; | |
| bool mDoJava1_7; | |
| CString mFilename; | |
| CLauncherCmdLineInfo() : mDoHelp(false), mDoForceUi(false), mDoJava1_7(false) {} | |
| virtual void ParseParam(const TCHAR* pszParam, BOOL bFlag, BOOL bLast) { | |
| // Expected command line: | |
| // /h | help : msg box with command line arguments | |
| // /f | force : force UI selection | |
| // /7 : require java 1.7 | |
| // path-to-launch | |
| if (!bFlag) { | |
| mFilename = pszParam; | |
| } else if (_tcsnccmp(pszParam, _T("h"), 2) == 0) { | |
| mDoHelp = true; | |
| } else if (_tcsnccmp(pszParam, _T("f"), 2) == 0) { | |
| mDoForceUi = true; | |
| } else if (_tcsnccmp(pszParam, _T("7"), 2) == 0) { | |
| mDoJava1_7 = true; | |
| } | |
| } | |
| }; | |
| CWinLauncher2App::CWinLauncher2App() { | |
| // support Restart Manager | |
| m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; | |
| // TODO: add construction code here, | |
| // Place all significant initialization in InitInstance | |
| } | |
| BOOL CWinLauncher2App::InitInstance() { | |
| // InitCommonControlsEx() is required on Windows XP if an application | |
| // manifest specifies use of ComCtl32.dll version 6 or later to enable | |
| // visual styles. Otherwise, any window creation will fail. | |
| INITCOMMONCONTROLSEX InitCtrls; | |
| InitCtrls.dwSize = sizeof(InitCtrls); | |
| // Set this to include all the common control classes you want to use | |
| // in your application. | |
| InitCtrls.dwICC = ICC_WIN95_CLASSES; | |
| InitCommonControlsEx(&InitCtrls); | |
| CWinApp::InitInstance(); | |
| AfxEnableControlContainer(); | |
| // Create the shell manager, in case the dialog contains | |
| // any shell tree view or shell list view controls. | |
| CShellManager *pShellManager = new CShellManager; | |
| // Activate "Windows Native" visual manager for enabling themes in MFC controls | |
| CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); | |
| // Set CWinApp default registry key. Must be consistent with all apps using findjava2. | |
| SetRegistryKey(_T("Android-FindJava2")); | |
| // Use VERSIONINFO.FileDescription as the canonical app name | |
| initUtils(NULL); | |
| CLauncherCmdLineInfo cmdLine; | |
| ParseCommandLine(cmdLine); | |
| if (cmdLine.mDoHelp) { | |
| const TCHAR *msg = | |
| _T("WinLauncher2 [/7|/f|/h]\r\n") | |
| _T("/7 : Requires Java 1.7 instead of 1.6\r\n") | |
| _T("/f : Force UI\r\n") | |
| _T("/h : Help\r\n"); | |
| AfxMessageBox(msg); | |
| return FALSE; // quit without starting MFC app msg loop | |
| } | |
| CJavaFinder javaFinder(JAVA_VERS_TO_INT(1, cmdLine.mDoJava1_7 ? 7 : 6)); | |
| CJavaPath javaPath = javaFinder.getRegistryPath(); | |
| if (cmdLine.mDoForceUi || javaPath.isEmpty()) { | |
| javaPath.clear(); | |
| CFindJava2Dlg dlg; | |
| dlg.setJavaFinder(&javaFinder); | |
| m_pMainWnd = &dlg; | |
| INT_PTR nResponse = dlg.DoModal(); | |
| if (nResponse == IDOK) { | |
| // Use choice selected by user and save in registry. | |
| javaPath = dlg.getSelectedPath(); | |
| javaFinder.setRegistryPath(javaPath); | |
| } else if (nResponse == IDCANCEL) { | |
| // Canceled by user, exit silently. | |
| } else if (nResponse == -1) { | |
| TRACE(traceAppMsg, 0, "Warning: dialog creation failed, so application is terminating unexpectedly.\n"); | |
| } | |
| } | |
| if (!javaPath.isEmpty()) { | |
| // TODO actually launch configured app instead of just printing path. | |
| CString msg(_T("PLACEHOLDER TODO run app using ")); | |
| msg.Append(javaPath.mPath); | |
| AfxMessageBox(msg); | |
| } | |
| // Delete the shell manager created above. | |
| if (pShellManager != NULL) { | |
| delete pShellManager; | |
| } | |
| // Since the dialog has been closed, return FALSE so that we exit the | |
| // application, rather than start the application's message pump. | |
| return FALSE; | |
| } | |