1 // Windows implementation of clipboard access for Nasal
3 // Copyright (C) 2012 Thomas Geymayer <tomgey@gmail.com>
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License as
7 // published by the Free Software Foundation; either version 2 of the
8 // License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful, but
11 // WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 #include "NasalClipboard.hxx"
21 #include <simgear/debug/logstream.hxx>
25 * Windows does only support on clipboard and no selection. We fake also the X11
26 * selection buffer - at least inside FlightGear
28 class ClipboardWindows:
34 * Get clipboard contents as text
36 virtual std::string getText(Type type)
38 if( type == CLIPBOARD )
42 if( !OpenClipboard(NULL) )
45 HANDLE hData = GetClipboardData( CF_TEXT );
46 char* buff = (char*)GlobalLock( hData );
49 GlobalUnlock( hData );
59 * Set clipboard contents as text
61 virtual bool setText(const std::string& text, Type type)
63 if( type == CLIPBOARD )
65 if( !OpenClipboard(NULL) )
69 if( !EmptyClipboard() )
71 else if( !text.empty() )
73 HGLOBAL hGlob = GlobalAlloc(GMEM_MOVEABLE, text.size() + 1);
78 memcpy(GlobalLock(hGlob), (char*)&text[0], text.size() + 1);
81 if( !SetClipboardData(CF_TEXT, hGlob) )
101 std::string _selection;
104 //------------------------------------------------------------------------------
105 NasalClipboard::Ptr NasalClipboard::create()
107 return NasalClipboard::Ptr(new ClipboardWindows);