Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/util/Clipboard.cc @ 3010

Last change on this file since 3010 was 2710, checked in by rgrieder, 16 years ago

Merged buildsystem3 containing buildsystem2 containing Adi's buildsystem branch back to the trunk.
Please update the media directory if you were not using buildsystem3 before.

  • Property svn:eol-style set to native
File size: 3.6 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 *   Windows version inspired by "Copy Text To Clipboard" by Laszlo Szathmary, 2007
28 *      http://www.loria.fr/~szathmar/off/projects/C/CopyTextToClipboard/index.php
29 */
30
31/**
32    @file
33    @brief OS-specific implementations of the clipboard functions.
34*/
35
36#include "Clipboard.h"
37
38#ifdef ORXONOX_PLATFORM_WINDOWS
39
40/////////////
41// Windows //
42/////////////
43
44#include <windows.h>
45#include "Debug.h"
46
47namespace orxonox
48{
49
50    /**
51        @brief Puts text into the windows-clipboard
52        @param text The text
53        @return True if the action was successful
54    */
55    bool toClipboard(const std::string& text)
56    {
57        try
58        {
59            if (OpenClipboard(0))
60            {
61                EmptyClipboard();
62                HGLOBAL clipbuffer = GlobalAlloc(GMEM_DDESHARE, text.size() + 1);
63                char* buffer = (char*)GlobalLock(clipbuffer);
64                strcpy(buffer, text.c_str());
65                GlobalUnlock(clipbuffer);
66                SetClipboardData(CF_TEXT, clipbuffer);
67                CloseClipboard();
68
69                return true;
70            }
71        }
72        catch (...)
73        {
74            COUT(1) << "Error: Unable to copy the following text to the clipboard:" << std::endl;
75            COUT(1) << "       \"" << text << "\"" << std::endl;
76        }
77        return false;
78    }
79
80    /**
81        @brief Gets text from the windows-clipboard if there is any text.
82        @return The retrieved text
83    */
84    std::string fromClipboard()
85    {
86        try
87        {
88            if (OpenClipboard(0))
89            {
90                HANDLE hData = GetClipboardData(CF_TEXT);
91                std::string output = (char*)GlobalLock(hData);
92                GlobalUnlock(hData);
93                CloseClipboard();
94
95                return output;
96            }
97        }
98        catch (...)
99        {
100            COUT(1) << "Error: Unable to retrieve text from the clipboard." << std::endl;
101        }
102        return "";
103    }
104}
105
106#else /* ORXONOX_PLATFORM_WINDOWS */
107
108/////////////
109// Default //
110/////////////
111
112namespace orxonox
113{
114    std::string clipboard = ""; //!< Keeps the text of our internal clipboard
115
116    /**
117        @brief Default implementation if there is no OS-specific implementation or no clipboard. Copies the text into an internal clipboard.
118        @param text The text
119        @return True
120    */
121    bool toClipboard(const std::string& text)
122    {
123        clipboard = text;
124        return true;
125    }
126
127    /**
128        @brief Default implementation if there is no OS-specific implementation or no clipboard. Gets the text from the internal clipboard.
129        @return The text
130    */
131    std::string fromClipboard()
132    {
133        return clipboard;
134    }
135}
136
137#endif /* ORXONOX_PLATFORM_WINDOWS */
Note: See TracBrowser for help on using the repository browser.