1// Clipboard.cpp
2
3#include <app/Clipboard.h>
4
5#include "Clipboard.h"
6
7/*!
8	\class Clipboard
9	\brief Server-side representation of a clipboard.
10*/
11
12// constructor
13/*!	\brief Creates and initializes a Clipboard.
14	\param name The name of the clipboard.
15*/
16Clipboard::Clipboard(const char *name)
17	: fName(name),
18	  fData(B_SIMPLE_DATA),
19	  fDataSource(),
20	  fCount(0),
21	  fWatchingService()
22{
23}
24
25// destructor
26/*!	\brief Frees all resources associate with this object.
27*/
28Clipboard::~Clipboard()
29{
30}
31
32// SetData
33/*!	\brief Sets the clipboard's data.
34
35	Also notifies all watchers that the clipboard data have changed.
36
37	\param data The new clipboard data.
38	\param dataSource The clipboards new data source.
39*/
40void
41Clipboard::SetData(const BMessage *data, BMessenger dataSource)
42{
43	fData = *data;
44	fDataSource = dataSource;
45	fCount++;
46	NotifyWatchers();
47}
48
49// Data
50/*!	\brief Returns the clipboard's data.
51	\return The clipboard's data.
52*/
53const BMessage *
54Clipboard::Data() const
55{
56	return &fData;
57}
58
59// DataSource
60/*!	\brief Returns the clipboard's data source.
61	\return The clipboard's data source.
62*/
63BMessenger
64Clipboard::DataSource() const
65{
66	return fDataSource;
67}
68
69// Count
70int32
71Clipboard::Count() const
72{
73	return fCount;
74}
75
76
77// AddWatcher
78/*!	\brief Adds a new watcher for this clipboard.
79	\param watcher The messenger referring to the new watcher.
80	\return \c true, if the watcher could be added successfully,
81			\c false otherwise.
82*/
83bool
84Clipboard::AddWatcher(BMessenger watcher)
85{
86	return fWatchingService.AddWatcher(watcher);
87}
88
89// RemoveWatcher
90/*!	\brief Removes a watcher from this clipboard.
91	\param watcher The watcher to be removed.
92	\return \c true, if the supplied watcher was watching the clipboard,
93			\c false otherwise.
94*/
95bool
96Clipboard::RemoveWatcher(BMessenger watcher)
97{
98	return fWatchingService.RemoveWatcher(watcher);
99}
100
101// NotifyWatchers
102/*!	\brief Sends a notification message that the clipboard data have changed
103		   to all associated watchers.
104*/
105void
106Clipboard::NotifyWatchers()
107{
108	BMessage message(B_CLIPBOARD_CHANGED);
109	fWatchingService.NotifyWatchers(&message, NULL);
110}
111
112