00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CMSWINDOWSCLIPBOARD_H
00020 #define CMSWINDOWSCLIPBOARD_H
00021
00022 #include "IClipboard.h"
00023 #include "CMSWindowsClipboardFacade.h"
00024 #include "stdvector.h"
00025 #define WIN32_LEAN_AND_MEAN
00026 #include <windows.h>
00027
00028 class IMSWindowsClipboardConverter;
00029 class IMSWindowsClipboardFacade;
00030
00032 class CMSWindowsClipboard : public IClipboard {
00033 public:
00034 CMSWindowsClipboard(HWND window);
00035 CMSWindowsClipboard(HWND window, IMSWindowsClipboardFacade &facade);
00036 virtual ~CMSWindowsClipboard();
00037
00039
00051 bool emptyUnowned();
00052
00054 static bool isOwnedBySynergy();
00055
00056
00057 virtual bool empty();
00058 virtual void add(EFormat, const CString& data);
00059 virtual bool open(Time) const;
00060 virtual void close() const;
00061 virtual Time getTime() const;
00062 virtual bool has(EFormat) const;
00063 virtual CString get(EFormat) const;
00064
00065 void setFacade(IMSWindowsClipboardFacade& facade);
00066
00067 private:
00068 void clearConverters();
00069
00070 UINT convertFormatToWin32(EFormat) const;
00071 HANDLE convertTextToWin32(const CString& data) const;
00072 CString convertTextFromWin32(HANDLE) const;
00073
00074 static UINT getOwnershipFormat();
00075
00076 private:
00077 typedef std::vector<IMSWindowsClipboardConverter*> ConverterList;
00078
00079 HWND m_window;
00080 mutable Time m_time;
00081 ConverterList m_converters;
00082 static UINT s_ownershipFormat;
00083 IMSWindowsClipboardFacade* m_facade;
00084 bool m_deleteFacade;
00085 };
00086
00088
00092 class IMSWindowsClipboardConverter : public IInterface {
00093 public:
00094
00095
00096
00097 virtual IClipboard::EFormat
00098 getFormat() const = 0;
00099
00100
00101
00102 virtual UINT getWin32Format() const = 0;
00103
00104
00105
00106
00107
00108 virtual HANDLE fromIClipboard(const CString&) const = 0;
00109
00110
00111
00112 virtual CString toIClipboard(HANDLE data) const = 0;
00113 };
00114
00115 #endif