2002/06/05 19:56:27
[org.ibex.core.git] / src / org / xwt / plat / Win32.cc
index acc51bd..ef8d70f 100644 (file)
@@ -13,6 +13,9 @@
 #include <windows.h>
 #include <mmsystem.h>
 #undef STRICT
+#undef MAX_PRIORITY
+#undef MIN_PRIORITY
+#undef NORM_PRIORITY
 
 #include <gcj/cni.h>
 
@@ -22,6 +25,7 @@
 #include <org/xwt/Surface.h>
 #include <org/xwt/DoubleBuffer.h>
 #include <org/xwt/Picture.h>
+#include <org/xwt/ByteStream.h>
 #include <org/xwt/Platform.h>
 #include <org/xwt/Platform$ParsedFont.h>
 #include <org/xwt/plat/Win32.h>
@@ -29,6 +33,7 @@
 #include <org/xwt/plat/Win32$Win32Surface.h>
 #include <org/xwt/plat/Win32$Win32DoubleBuffer.h>
 #include <org/xwt/plat/Win32$Win32Picture.h>
+#include <org/xwt/util/Log.h>
 #include <org/xwt/util/Semaphore.h>
 
 // for debugging
@@ -161,6 +166,7 @@ static unsigned char hand_cursor_and[32 * 4] = {
   0xFF, 0xFF, 0xFF, 0xFF
 };
 
+
 void org::xwt::plat::Win32::natInit() {
 
     // grab desktop dc/handle
@@ -233,6 +239,63 @@ void org::xwt::plat::Win32::natInit() {
 
 // Platform Methods ///////////////////////////////////////////////////////////////////
 
+jstring org::xwt::plat::Win32::_fileDialog(jstring suggestedFileName, jboolean write) {
+
+    char buf[1024];
+    OPENFILENAME ofn;
+    memset(buf, 0, 1024);
+    memset(&ofn, 0, sizeof(OPENFILENAME));
+
+    if (suggestedFileName != NULL)
+        JvGetStringUTFRegion(suggestedFileName, 0, min(1023, JvGetStringUTFLength(suggestedFileName)), buf);
+    
+    ofn.lStructSize = sizeof(OPENFILENAME);
+    ofn.nMaxCustFilter = 0;
+    ofn.lpstrFile = buf;
+    ofn.nMaxFile = 1024;
+
+    if (write) ofn.Flags |= OFN_OVERWRITEPROMPT;
+    ofn.Flags |= OFN_HIDEREADONLY;
+
+    int ret = write ? GetSaveFileName(&ofn) : GetOpenFileName(&ofn);
+    return ret == 0 ? NULL : JvNewStringLatin1(buf);
+}
+
+void org::xwt::plat::Win32::__detectProxy(JArray<jstring>* container) {
+
+    HKEY hkey;
+    char buf[1024];
+    DWORD buflen = 1024;
+    DWORD type;
+    LONG result = RegOpenKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", &hkey);
+    if (result != ERROR_SUCCESS) return;
+    
+    buf[0] = '\0';
+    type = REG_SZ;
+    buflen = 1024;
+    result = RegQueryValueEx(hkey, "AutoConfigURL", NULL, &type, (LPBYTE)buf, &buflen);
+    buf[buflen] = '\0';
+    if (result == ERROR_SUCCESS) elements(container)[2] = JvNewStringLatin1(buf);
+
+    buf[0] = '\0';
+    type = REG_BINARY;
+    RegQueryValueEx(hkey, "ProxyEnable", NULL, &type, (LPBYTE)buf, &buflen);
+    if (buf[0] != 1) return;
+
+    buf[0] = '\0';
+    type = REG_SZ;
+    buflen = 1024;
+    RegQueryValueEx(hkey, "ProxyServer", NULL, &type, (LPBYTE)buf, &buflen);
+    buf[buflen] = '\0';
+    elements(container)[0] = JvNewStringLatin1(buf);
+
+    buf[0] = '\0';
+    buflen = 1024;
+    RegQueryValueEx(hkey, "ProxyOverride", NULL, &type, (LPBYTE)buf, &buflen);
+    buf[buflen] = '\0';
+    elements(container)[1] = JvNewStringLatin1(buf);
+}
+
 jstring org::xwt::plat::Win32::_getClipBoard() {
     OpenClipboard((HWND)desktop_handle);
     HGLOBAL hmem = GetClipboardData(CF_TEXT);
@@ -618,6 +681,7 @@ jint org::xwt::plat::Win32$Win32Surface::WndProc(jint _hwnd, jint _iMsg, jint _w
     UINT iMsg = (UINT)_iMsg;
     WPARAM wParam = (WPARAM)_wParam;
     LPARAM lParam = (LPARAM)_lParam;
+
     int oldmousex, oldmousey;
     MINMAXINFO* mmi;
     POINT point;
@@ -757,13 +821,13 @@ jint org::xwt::plat::Win32$Win32Surface::WndProc(jint _hwnd, jint _iMsg, jint _w
 
 static char keyarr [256] = { 0 };
 static jstring keyToString(WPARAM wParam) {
-    char arr[4];
+    char arr[8];
     keyarr[VK_CAPITAL] = GetKeyState(VK_CAPITAL);
     keyarr[VK_LSHIFT] = GetKeyState(VK_LSHIFT);
     keyarr[VK_RSHIFT] = GetKeyState(VK_RSHIFT);
     keyarr[VK_SHIFT] = GetKeyState(VK_SHIFT);
-    
-    if (ToAscii(wParam, 0, (BYTE*)keyarr, (WORD*)arr, 0) == 1) {
+
+    if (ToAsciiEx(wParam, 0, (BYTE*)keyarr, (WORD*)arr, 0, GetKeyboardLayout(0)) == 1) {
         switch (arr[0]) {
         case '\t': return JvNewStringLatin1("tab");
         case 0x1b: return JvNewStringLatin1("escape");