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