Oops; forgot to check in the copy-to-clipboard option for Windows.
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Mon, 2 May 2005 10:55:32 +0000 (10:55 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Mon, 2 May 2005 10:55:32 +0000 (10:55 +0000)
git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5730 cda61777-01e9-0310-a592-d414129be87e

windows.c

index f3b8aeb..c570b29 100644 (file)
--- a/windows.c
+++ b/windows.c
 #define IDM_RESTART   0x0020
 #define IDM_UNDO      0x0030
 #define IDM_REDO      0x0040
-#define IDM_QUIT      0x0050
-#define IDM_CONFIG    0x0060
-#define IDM_SEED      0x0070
-#define IDM_HELPC     0x0080
-#define IDM_GAMEHELP  0x0090
+#define IDM_COPY      0x0050
+#define IDM_QUIT      0x0060
+#define IDM_CONFIG    0x0070
+#define IDM_SEED      0x0080
+#define IDM_HELPC     0x0090
+#define IDM_GAMEHELP  0x00A0
 #define IDM_PRESETS   0x0100
 
 #define HELP_FILE_NAME  "puzzles.hlp"
@@ -325,6 +326,30 @@ void activate_timer(frontend *fe)
     }
 }
 
+void write_clip(HWND hwnd, char *data)
+{
+    HGLOBAL clipdata;
+    int len = strlen(data);
+    void *lock;
+
+    clipdata = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, len + 1);
+    if (!clipdata)
+       return;
+    lock = GlobalLock(clipdata);
+    if (!lock)
+       return;
+    memcpy(lock, data, len);
+    ((unsigned char *) lock)[len] = 0;
+    GlobalUnlock(clipdata);
+
+    if (OpenClipboard(hwnd)) {
+       EmptyClipboard();
+       SetClipboardData(CF_TEXT, clipdata);
+       CloseClipboard();
+    } else
+       GlobalFree(clipdata);
+}
+
 /*
  * See if we can find a help file.
  */
@@ -458,6 +483,10 @@ static frontend *new_window(HINSTANCE inst, char *game_id, char **error)
        AppendMenu(menu, MF_SEPARATOR, 0, 0);
        AppendMenu(menu, MF_ENABLED, IDM_UNDO, "Undo");
        AppendMenu(menu, MF_ENABLED, IDM_REDO, "Redo");
+       if (thegame.can_format_as_text) {
+           AppendMenu(menu, MF_SEPARATOR, 0, 0);
+           AppendMenu(menu, MF_ENABLED, IDM_COPY, "Copy");
+       }
        AppendMenu(menu, MF_SEPARATOR, 0, 0);
        AppendMenu(menu, MF_ENABLED, IDM_QUIT, "Exit");
         if (fe->help_path) {
@@ -892,6 +921,15 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            if (!midend_process_key(fe->me, 0, 0, '\x12'))
                PostQuitMessage(0);
            break;
+         case IDM_COPY:
+           {
+               char *text = midend_text_format(fe->me);
+               if (text)
+                   write_clip(hwnd, text);
+               else
+                   MessageBeep(MB_ICONWARNING);
+           }
+           break;
          case IDM_QUIT:
            if (!midend_process_key(fe->me, 0, 0, 'q'))
                PostQuitMessage(0);