Minsky
minsky::Clipboard Class Reference

An RAII wrapper around jtanx's libclipboard (https://github.com/jtanx/libclipboard) More...

#include <clipboard.h>

Collaboration diagram for minsky::Clipboard:
Collaboration graph

Classes

struct  Impl
 

Public Member Functions

 Clipboard ()
 
std::string getClipboard () const
 return clipboard contents as UTF8 text More...
 
void putClipboard (const std::string &) const
 puts UTF8 text string on clipboard More...
 

Private Attributes

std::shared_ptr< Implpimpl
 

Detailed Description

An RAII wrapper around jtanx's libclipboard (https://github.com/jtanx/libclipboard)

Definition at line 28 of file clipboard.h.

Constructor & Destructor Documentation

◆ Clipboard()

minsky::Clipboard::Clipboard ( )

Definition at line 41 of file clipboard.cc.

41 : pimpl(make_shared<Impl>()) {}
std::shared_ptr< Impl > pimpl
Definition: clipboard.h:30

Member Function Documentation

◆ getClipboard()

std::string minsky::Clipboard::getClipboard ( ) const

return clipboard contents as UTF8 text

Definition at line 43 of file clipboard.cc.

References pimpl.

44  {
45 #if defined(_WIN32)
46  string r;
47  OpenClipboard(nullptr);
48  if (HANDLE h=GetClipboardData(CF_TEXT))
49  {
50  r=static_cast<const char*>(GlobalLock(h));
51  GlobalUnlock(h);
52  }
53  CloseClipboard();
54  return r;
55 #else
56  if (pimpl->clipboard)
57  {
58  auto s=clipboard_text(pimpl->clipboard);
59  return s? s: "";
60  }
61  return {};
62 #endif
63  }
std::shared_ptr< Impl > pimpl
Definition: clipboard.h:30

◆ putClipboard()

void minsky::Clipboard::putClipboard ( const std::string &  text) const

puts UTF8 text string on clipboard

Definition at line 65 of file clipboard.cc.

References pimpl.

66  {
67  // libclipboard didn't work on Windows???
68 #if defined(_WIN32)
69  HWND hwnd=nullptr;//TODO enumerate top level windows to find one belonging to this
70  OpenClipboard(hwnd);
71  EmptyClipboard();
72  HGLOBAL h=GlobalAlloc(GMEM_MOVEABLE, text.length()+1);
73  LPTSTR hh=static_cast<LPTSTR>(GlobalLock(h));
74  if (hh)
75  {
76  strcpy(hh,text.c_str());
77  GlobalUnlock(h);
78  if (SetClipboardData(CF_TEXT, h)==nullptr)
79  GlobalFree(h);
80  }
81  CloseClipboard();
82 #else
83  if (pimpl->clipboard)
84  {
85  if (text.empty())
86  clipboard_clear(pimpl->clipboard, LCB_CLIPBOARD);
87  else
88  clipboard_set_text(pimpl->clipboard, text.c_str());
89  }
90 #endif
91  }
std::shared_ptr< Impl > pimpl
Definition: clipboard.h:30

Member Data Documentation

◆ pimpl

std::shared_ptr<Impl> minsky::Clipboard::pimpl
private

Definition at line 30 of file clipboard.h.

Referenced by getClipboard(), and putClipboard().


The documentation for this class was generated from the following files: