blob: f1780b9f3e96a06d47e7b3f2f00845a0d50985da [file] [log] [blame]
/*
* Copyright (C) 2012 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.
*/
package com.motorola.studio.android.nativeos;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.internal.win32.OS;
import org.eclipse.swt.internal.win32.RECT;
import org.eclipse.swt.internal.win32.TCHAR;
import org.eclipse.swt.widgets.Composite;
import com.motorola.studio.android.common.log.StudioLogger;
/***
* This class is responsible for provide WIN32 X86 specific constants values
* and implementation of INativeUI interface
*/
@SuppressWarnings("restriction")
public class NativeUI implements INativeUI
{
private static final int SWP_SHOWWINDOW = 0x0040;
String DEFAULT_COMMANDLINE = "";
String DEFAULT_USEVNC = "false";
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#getDefaultCommandLine()
*/
public String getDefaultCommandLine()
{
return DEFAULT_COMMANDLINE;
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#getDefaultUseVnc()
*/
public String getDefaultUseVnc()
{
return DEFAULT_USEVNC;
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#getWindowHandle(java.lang.String)
*/
public long getWindowHandle(String windowName)
{
StudioLogger.debug(this, "Get native window handler for: " + windowName);
long windowHandle = 0;
try
{
TCHAR className = null;
TCHAR tChrTitle = new TCHAR(0, windowName, true);
windowHandle = OS.FindWindow(className, tChrTitle);
}
catch (Throwable t)
{
StudioLogger.error(this.getClass(), "Failed to retrieve window handler for window "
+ windowName, t);
}
return windowHandle;
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#getWindowProperties(long)
*/
public long getWindowProperties(long windowHandle)
{
long windowLong = OS.GetWindowLong((int) windowHandle, OS.GWL_STYLE);
return windowLong;
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#setWindowProperties(long, long)
*/
public void setWindowProperties(long windowHandle, long originalProperties)
{
OS.SetWindowLong((int) windowHandle, OS.GWL_STYLE, (int) originalProperties);
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#embedWindow(long, org.eclipse.swt.widgets.Composite)
*/
public long embedWindow(long windowHandle, Composite composite)
{
// Set the position to fix an odd behavior in the Windows Classic Theme - the window goes off-screen and Emulator View stops working
OS.SetWindowPos((int) windowHandle, OS.HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW);
long originalParent = OS.SetParent((int) windowHandle, composite.handle);
return originalParent;
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#unembedWindow(long, long)
*/
public void unembedWindow(long windowHandle, long originalParent)
{
OS.SetParent((int) windowHandle, (int) originalParent);
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#getWindowSize(long, long)
*/
public Point getWindowSize(long originalParentHandle, long windowHandle)
{
RECT rect = new RECT();
OS.GetClientRect((int) windowHandle, rect);
return new Point(rect.right, rect.bottom);
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#setWindowStyle(long)
*/
public void setWindowStyle(long windowHandle)
{
OS.SetWindowLong((int) windowHandle, OS.GWL_STYLE, OS.WS_VISIBLE | OS.WS_CLIPCHILDREN
| OS.WS_CLIPSIBLINGS);
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#hideWindow(long)
*/
public void hideWindow(long windowHandle)
{
OS.ShowWindow((int) windowHandle, OS.SW_HIDE);
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#showWindow(long)
*/
public void showWindow(long windowHandle)
{
OS.ShowWindow((int) windowHandle, OS.SW_SHOW);
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#restoreWindow(long)
*/
public void restoreWindow(long windowHandle)
{
OS.ShowWindow((int) windowHandle, OS.SW_SHOWMINIMIZED);
OS.ShowWindow((int) windowHandle, OS.SW_RESTORE);
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#sendNextLayoutCommand(long, long)
*/
public void sendNextLayoutCommand(long originalParent, long windowHandle)
{
OS.SendMessage((int) windowHandle, OS.WM_KEYDOWN, OS.VK_CONTROL, 0);
OS.SendMessage((int) windowHandle, OS.WM_KEYDOWN, OS.VK_F12, 0);
OS.SendMessage((int) windowHandle, OS.WM_KEYUP, OS.VK_CONTROL, 0);
OS.SendMessage((int) windowHandle, OS.WM_KEYUP, OS.VK_F12, 0);
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#isWindowEnabled(long)
*/
public boolean isWindowEnabled(long windowHandle)
{
long getFocus = OS.GetForegroundWindow();
return windowHandle == getFocus;
}
/*
* (non-Javadoc)
* @see com.motorola.studio.android.nativeos.INativeUI#setWindowFocus(long)
*/
public void setWindowFocus(long windowHandle)
{
OS.SetForegroundWindow((int) windowHandle);
}
}