1/*
2 * Copyright 2007-2009, Haiku Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Author:
6 *		Gabe Yoder, gyoder@stny.rr.com
7 */
8#ifndef _CLIPBOARD_H
9#define	_CLIPBOARD_H
10
11
12#include <BeBuild.h>
13#include <Locker.h>
14#include <Messenger.h>
15
16class BMessage;
17
18
19enum {
20	B_CLIPBOARD_CHANGED = 'CLCH'
21};
22
23class BClipboard {
24public:
25								BClipboard(const char* name,
26									bool transient = false);
27	virtual						~BClipboard();
28
29			const char*			Name() const;
30
31			uint32				LocalCount() const;
32			uint32				SystemCount() const;
33			status_t			StartWatching(BMessenger target);
34			status_t			StopWatching(BMessenger target);
35
36			bool				Lock();
37			void				Unlock();
38			bool				IsLocked() const;
39
40			status_t			Clear();
41			status_t			Commit();
42			status_t			Commit(bool failIfChanged);
43			status_t			Revert();
44
45			BMessenger			DataSource() const;
46			BMessage*			Data() const;
47
48private:
49								BClipboard(const BClipboard&);
50			BClipboard&			operator=(const BClipboard&);
51
52	virtual	void				_ReservedClipboard1();
53	virtual	void				_ReservedClipboard2();
54	virtual	void				_ReservedClipboard3();
55
56			bool				_AssertLocked() const;
57			status_t			_DownloadFromSystem(bool force = false);
58			status_t			_UploadToSystem();
59
60			uint32				_reserved0;
61			BMessage*			fData;
62			BLocker				fLock;
63			BMessenger			fClipHandler;
64			BMessenger			fDataSource;
65			uint32				fCount;
66			char*				fName;
67			uint32				_reserved[4];
68};
69
70extern BClipboard* be_clipboard;
71
72#endif	// _CLIPBOARD_H
73