58b5124e46
The clipboards are managed in a simple string->Clipboard map. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10703 a95241bf-73f2-0310-859d-f6bbb57e9c96
112 lines
2.1 KiB
C++
112 lines
2.1 KiB
C++
// Clipboard.cpp
|
|
|
|
#include <app/Clipboard.h>
|
|
|
|
#include "Clipboard.h"
|
|
|
|
/*!
|
|
\class Clipboard
|
|
\brief Server-side representation of a clipboard.
|
|
*/
|
|
|
|
// constructor
|
|
/*! \brief Creates and initializes a Clipboard.
|
|
\param name The name of the clipboard.
|
|
*/
|
|
Clipboard::Clipboard(const char *name)
|
|
: fName(name),
|
|
fData(B_SIMPLE_DATA),
|
|
fDataSource(),
|
|
fCount(0),
|
|
fWatchingService()
|
|
{
|
|
}
|
|
|
|
// destructor
|
|
/*! \brief Frees all resources associate with this object.
|
|
*/
|
|
Clipboard::~Clipboard()
|
|
{
|
|
}
|
|
|
|
// SetData
|
|
/*! \brief Sets the clipboard's data.
|
|
|
|
Also notifies all watchers that the clipboard data have changed.
|
|
|
|
\param data The new clipboard data.
|
|
\param dataSource The clipboards new data source.
|
|
*/
|
|
void
|
|
Clipboard::SetData(const BMessage *data, BMessenger dataSource)
|
|
{
|
|
fData = *data;
|
|
fDataSource = dataSource;
|
|
fCount++;
|
|
NotifyWatchers();
|
|
}
|
|
|
|
// Data
|
|
/*! \brief Returns the clipboard's data.
|
|
\return The clipboard's data.
|
|
*/
|
|
const BMessage *
|
|
Clipboard::Data() const
|
|
{
|
|
return &fData;
|
|
}
|
|
|
|
// DataSource
|
|
/*! \brief Returns the clipboard's data source.
|
|
\return The clipboard's data source.
|
|
*/
|
|
BMessenger
|
|
Clipboard::DataSource() const
|
|
{
|
|
return fDataSource;
|
|
}
|
|
|
|
// Count
|
|
int32
|
|
Clipboard::Count() const
|
|
{
|
|
return fCount;
|
|
}
|
|
|
|
|
|
// AddWatcher
|
|
/*! \brief Adds a new watcher for this clipboard.
|
|
\param watcher The messenger referring to the new watcher.
|
|
\return \c true, if the watcher could be added successfully,
|
|
\c false otherwise.
|
|
*/
|
|
bool
|
|
Clipboard::AddWatcher(BMessenger watcher)
|
|
{
|
|
return fWatchingService.AddWatcher(watcher);
|
|
}
|
|
|
|
// RemoveWatcher
|
|
/*! \brief Removes a watcher from this clipboard.
|
|
\param watcher The watcher to be removed.
|
|
\return \c true, if the supplied watcher was watching the clipboard,
|
|
\c false otherwise.
|
|
*/
|
|
bool
|
|
Clipboard::RemoveWatcher(BMessenger watcher)
|
|
{
|
|
return fWatchingService.RemoveWatcher(watcher);
|
|
}
|
|
|
|
// NotifyWatchers
|
|
/*! \brief Sends a notification message that the clipboard data have changed
|
|
to all associated watchers.
|
|
*/
|
|
void
|
|
Clipboard::NotifyWatchers()
|
|
{
|
|
BMessage message(B_CLIPBOARD_CHANGED);
|
|
fWatchingService.NotifyWatchers(&message, NULL);
|
|
}
|
|
|