summaryrefslogtreecommitdiffstats
path: root/win32caml/menu.c
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2001-11-20 13:45:37 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2001-11-20 13:45:37 +0000
commit5242d0edd814272d17a2a027b43757e022603474 (patch)
tree8857aeec31821a3c9125988343268d5c0948cf84 /win32caml/menu.c
parentd3db3052c3b37fe209a475a3b2405a99486e6fd4 (diff)
Suite integration corrections J. Navia
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@4025 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'win32caml/menu.c')
-rw-r--r--win32caml/menu.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/win32caml/menu.c b/win32caml/menu.c
index d0ffbc7e0..318cb9f1f 100644
--- a/win32caml/menu.c
+++ b/win32caml/menu.c
@@ -13,6 +13,7 @@
#include <stdio.h>
#include <windows.h>
+#include <Richedit.h>
#include "inria.h"
#include "inriares.h"
@@ -298,6 +299,12 @@ void ForceRepaint(void)
InvalidateRect(hwndEdit,NULL,1);
}
+static void Add_Char_To_Queue(int c)
+{
+ HWND hwndEdit = (HWND)GetWindowLong(hwndSession,DWL_USER);
+ SendMessage(hwndEdit,WM_CHAR,c,1);
+}
+
/*------------------------------------------------------------------------
Procedure: AddLineToControl ID:1
Purpose: It will ad the given text at the end of the edit
@@ -423,6 +430,60 @@ static void SaveText(char *fname)
free(buf);
}
+
+static void Add_Clipboard_To_Queue(void)
+{
+ if (IsClipboardFormatAvailable(CF_TEXT) &&
+ OpenClipboard(hwndMain))
+ {
+ HANDLE hClipData = GetClipboardData(CF_TEXT);
+
+ if (hClipData)
+ {
+ char *str = GlobalLock(hClipData);
+
+ if (str)
+ while (*str)
+ {
+ if (*str != '\r')
+ Add_Char_To_Queue(*str);
+ str++;
+ }
+ GlobalUnlock(hClipData);
+ }
+ CloseClipboard();
+ }
+
+}
+
+static void CopyToClipboard(HWND hwnd)
+{
+ HWND hwndEdit = (HWND)GetWindowLong(hwndSession,DWL_USER);
+ SendMessage(hwndEdit,WM_COPY,0,0);
+}
+
+int ResetText(void)
+{
+ HWND hwndEdit = (HWND) GetWindowLong(hwndSession,DWL_USER);
+ TEXTRANGE cr;
+ int len = SendMessage(hwndEdit,WM_GETTEXTLENGTH,0,0);
+ char *tmp = malloc(len+10),*p;
+
+ memset(tmp,0,len+10);
+ cr.chrg.cpMin = 0;
+ cr.chrg.cpMax = -1;
+ cr.lpstrText = tmp;
+ SendMessage(hwndEdit,EM_GETTEXTRANGE,0,(LPARAM)&cr);
+ p = tmp+len/2;
+ while (*p && *p != '\r')
+ p++;
+ SendMessage(hwndEdit,EM_SETSEL,0,(LPARAM)-1);
+ SendMessage(hwndEdit,EM_REPLACESEL,0,(LPARAM)p);
+ InvalidateRect(hwndEdit,0,1);
+ free(tmp);
+ return 0;
+}
+
/*------------------------------------------------------------------------
Procedure: HandleCommand ID:1
Purpose: Handles all menu commands.
@@ -456,6 +517,15 @@ void HandleCommand(HWND hwnd, WPARAM wParam,LPARAM lParam)
case IDM_GC:
AddLineToControl("Gc.full_major();;");
break;
+ case IDCTRLC:
+ InterruptOcaml();
+ break;
+ case IDM_EDITPASTE:
+ Add_Clipboard_To_Queue();
+ break;
+ case IDM_EDITCOPY:
+ CopyToClipboard(hwnd);
+ break;
case IDM_SAVE:
fname = SafeMalloc(512);
if (GetSaveName(fname,512)) {
@@ -503,6 +573,15 @@ void HandleCommand(HWND hwnd, WPARAM wParam,LPARAM lParam)
case IDM_ABOUT:
CallDlgProc(AboutDlgProc,IDD_ABOUT);
break;
+ default:
+ if (LOWORD(wParam) >= IDEDITCONTROL && LOWORD(wParam) < IDEDITCONTROL+5) {
+ switch (HIWORD(wParam)) {
+ case EN_ERRSPACE:
+ ResetText();
+ break;
+ }
+ }
+ break;
}
}