/* | |
* 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; | |
} | |