Replace ClipboardTree by Clipboard, a class just representing a clipboard.
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
This commit is contained in:
@@ -0,0 +1,111 @@
|
|||||||
|
// 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);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
// Clipboard.h
|
||||||
|
|
||||||
|
#ifndef CLIPBOARD_H
|
||||||
|
#define CLIPBOARD_H
|
||||||
|
|
||||||
|
#include <String.h>
|
||||||
|
#include <Message.h>
|
||||||
|
#include <Messenger.h>
|
||||||
|
#include "WatchingService.h"
|
||||||
|
|
||||||
|
class Clipboard {
|
||||||
|
public:
|
||||||
|
Clipboard(const char *name);
|
||||||
|
~Clipboard();
|
||||||
|
|
||||||
|
void SetData(const BMessage *data, BMessenger dataSource);
|
||||||
|
|
||||||
|
const BMessage *Data() const;
|
||||||
|
BMessenger DataSource() const;
|
||||||
|
int32 Count() const;
|
||||||
|
|
||||||
|
bool AddWatcher(BMessenger watcher);
|
||||||
|
bool RemoveWatcher(BMessenger watcher);
|
||||||
|
void NotifyWatchers();
|
||||||
|
|
||||||
|
private:
|
||||||
|
BString fName;
|
||||||
|
BMessage fData;
|
||||||
|
BMessenger fDataSource;
|
||||||
|
int32 fCount;
|
||||||
|
WatchingService fWatchingService;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CLIPBOARD_H
|
||||||
@@ -1,27 +1,27 @@
|
|||||||
// ClipboardHandler.cpp
|
// ClipboardHandler.cpp
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
#include <RegistrarDefs.h>
|
#include <RegistrarDefs.h>
|
||||||
|
|
||||||
|
#include "Clipboard.h"
|
||||||
#include "ClipboardHandler.h"
|
#include "ClipboardHandler.h"
|
||||||
|
|
||||||
// bonefish: TODO: Cleanup/reimplement! The ClipboardTree doesn't need to be a
|
|
||||||
// tree at all. Strip it off fLeftChild, fRightChild, and fCount and we have a
|
|
||||||
// server-side clipboard representation. Simply use a name->clipboard map to
|
|
||||||
// manage the clipboards. The clipboard count (which doesn't work at the
|
|
||||||
// moment) will be the size of the map.
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class ClipboardHandler
|
\class ClipboardHandler
|
||||||
\brief Handles all clipboard related requests.
|
\brief Handles all clipboard related requests.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
struct ClipboardHandler::ClipboardMap : map<string, Clipboard*> {};
|
||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
/*! \brief Creates and initializes a ClipboardHandler.
|
/*! \brief Creates and initializes a ClipboardHandler.
|
||||||
*/
|
*/
|
||||||
ClipboardHandler::ClipboardHandler()
|
ClipboardHandler::ClipboardHandler()
|
||||||
: BHandler()
|
: BHandler(),
|
||||||
|
fClipboards(new ClipboardMap)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,6 +30,11 @@ ClipboardHandler::ClipboardHandler()
|
|||||||
*/
|
*/
|
||||||
ClipboardHandler::~ClipboardHandler()
|
ClipboardHandler::~ClipboardHandler()
|
||||||
{
|
{
|
||||||
|
for (ClipboardMap::iterator it = fClipboards->begin();
|
||||||
|
it != fClipboards->end();
|
||||||
|
++it) {
|
||||||
|
delete it->second;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MessageReceived
|
// MessageReceived
|
||||||
@@ -40,143 +45,147 @@ ClipboardHandler::~ClipboardHandler()
|
|||||||
void
|
void
|
||||||
ClipboardHandler::MessageReceived(BMessage *message)
|
ClipboardHandler::MessageReceived(BMessage *message)
|
||||||
{
|
{
|
||||||
BString name;
|
const char *name;
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
switch (message->what) {
|
switch (message->what) {
|
||||||
case B_REG_ADD_CLIPBOARD:
|
case B_REG_ADD_CLIPBOARD:
|
||||||
{
|
{
|
||||||
if ( message->FindString("name",&name) != B_OK )
|
status_t result = B_BAD_VALUE;
|
||||||
{
|
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
if (message->FindString("name", &name) == B_OK) {
|
||||||
}
|
if (_GetClipboard(name))
|
||||||
else
|
result = B_OK;
|
||||||
{
|
|
||||||
fClipboardTree.AddNode(name);
|
|
||||||
reply.AddInt32("result",B_OK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reply.what = B_REG_RESULT;
|
reply.what = B_REG_RESULT;
|
||||||
|
reply.AddInt32("result", result);
|
||||||
message->SendReply(&reply);
|
message->SendReply(&reply);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case B_REG_GET_CLIPBOARD_COUNT:
|
case B_REG_GET_CLIPBOARD_COUNT:
|
||||||
{
|
{
|
||||||
if ( message->FindString("name",&name) != B_OK )
|
status_t result = B_BAD_VALUE;
|
||||||
{
|
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
if (message->FindString("name", &name) == B_OK) {
|
||||||
|
if (Clipboard *clipboard = _GetClipboard(name)) {
|
||||||
|
reply.AddInt32("count", clipboard->Count());
|
||||||
|
result = B_OK;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
ClipboardTree *node = fClipboardTree.GetNode(name);
|
|
||||||
if ( node )
|
|
||||||
{
|
|
||||||
reply.AddInt32("count",(uint32)(node->GetCount()));
|
|
||||||
reply.AddInt32("result",B_OK);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reply.AddInt32("result", result);
|
||||||
reply.what = B_REG_RESULT;
|
reply.what = B_REG_RESULT;
|
||||||
message->SendReply(&reply);
|
message->SendReply(&reply);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case B_REG_CLIPBOARD_START_WATCHING:
|
case B_REG_CLIPBOARD_START_WATCHING:
|
||||||
{
|
{
|
||||||
|
status_t result = B_BAD_VALUE;
|
||||||
|
|
||||||
BMessenger target;
|
BMessenger target;
|
||||||
if ( (message->FindString("name",&name) != B_OK) ||
|
if (message->FindString("name", &name) == B_OK
|
||||||
(message->FindMessenger("target",&target) != B_OK) )
|
&& message->FindMessenger("target", &target) == B_OK) {
|
||||||
{
|
Clipboard *clipboard = _GetClipboard(name);
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
if (clipboard && clipboard->AddWatcher(target))
|
||||||
}
|
result = B_OK;
|
||||||
else
|
|
||||||
{
|
|
||||||
ClipboardTree *node = fClipboardTree.GetNode(name);
|
|
||||||
if ( node && node->AddWatcher(&target) )
|
|
||||||
reply.AddInt32("result",B_OK);
|
|
||||||
else
|
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reply.what = B_REG_RESULT;
|
reply.what = B_REG_RESULT;
|
||||||
|
reply.AddInt32("result", result);
|
||||||
message->SendReply(&reply);
|
message->SendReply(&reply);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case B_REG_CLIPBOARD_STOP_WATCHING:
|
case B_REG_CLIPBOARD_STOP_WATCHING:
|
||||||
{
|
{
|
||||||
|
status_t result = B_BAD_VALUE;
|
||||||
|
|
||||||
BMessenger target;
|
BMessenger target;
|
||||||
if ( (message->FindString("name",&name) != B_OK) ||
|
if (message->FindString("name", &name) == B_OK
|
||||||
(message->FindMessenger("target",&target) != B_OK) )
|
&& message->FindMessenger("target", &target) == B_OK) {
|
||||||
{
|
Clipboard *clipboard = _GetClipboard(name);
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
if (clipboard && clipboard->RemoveWatcher(target))
|
||||||
}
|
result = B_OK;
|
||||||
else
|
|
||||||
{
|
|
||||||
ClipboardTree *node = fClipboardTree.GetNode(name);
|
|
||||||
if ( node && node->RemoveWatcher(&target) )
|
|
||||||
reply.AddInt32("result",B_OK);
|
|
||||||
else
|
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reply.what = B_REG_RESULT;
|
reply.what = B_REG_RESULT;
|
||||||
|
reply.AddInt32("result", result);
|
||||||
message->SendReply(&reply);
|
message->SendReply(&reply);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case B_REG_DOWNLOAD_CLIPBOARD:
|
case B_REG_DOWNLOAD_CLIPBOARD:
|
||||||
{
|
{
|
||||||
if ( message->FindString("name",&name) != B_OK )
|
status_t result = B_BAD_VALUE;
|
||||||
{
|
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
if (message->FindString("name", &name) == B_OK) {
|
||||||
|
Clipboard *clipboard = _GetClipboard(name);
|
||||||
|
if (clipboard) {
|
||||||
|
reply.AddMessage("data", clipboard->Data());
|
||||||
|
reply.AddMessenger("data source", clipboard->DataSource());
|
||||||
|
reply.AddInt32("count", clipboard->Count());
|
||||||
|
result = B_OK;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
ClipboardTree *node = fClipboardTree.GetNode(name);
|
|
||||||
if ( node )
|
|
||||||
{
|
|
||||||
reply.AddMessage("data",node->GetData());
|
|
||||||
reply.AddMessenger("data source",*node->GetDataSource());
|
|
||||||
reply.AddInt32("count",(uint32)(node->GetCount()));
|
|
||||||
reply.AddInt32("result",B_OK);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reply.what = B_REG_RESULT;
|
reply.what = B_REG_RESULT;
|
||||||
|
reply.AddInt32("result", result);
|
||||||
message->SendReply(&reply);
|
message->SendReply(&reply);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case B_REG_UPLOAD_CLIPBOARD:
|
case B_REG_UPLOAD_CLIPBOARD:
|
||||||
{
|
{
|
||||||
|
status_t result = B_BAD_VALUE;
|
||||||
|
|
||||||
BMessage data;
|
BMessage data;
|
||||||
BMessenger dataSource;
|
BMessenger source;
|
||||||
ClipboardTree *node = NULL;
|
if (message->FindString("name", &name) == B_OK
|
||||||
if ( (message->FindString("name",&name) != B_OK) ||
|
&& message->FindMessenger("data source", &source) == B_OK
|
||||||
(message->FindMessage("data",&data) != B_OK) ||
|
&& message->FindMessage("data", &data) == B_OK) {
|
||||||
(message->FindMessenger("data source",&dataSource) != B_OK) )
|
Clipboard *clipboard = _GetClipboard(name);
|
||||||
{
|
if (clipboard) {
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
clipboard->SetData(&data, source);
|
||||||
|
reply.AddInt32("count", clipboard->Count());
|
||||||
|
result = B_OK;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
node = fClipboardTree.GetNode(name);
|
|
||||||
if ( node )
|
|
||||||
{
|
|
||||||
node->SetData(&data);
|
|
||||||
node->SetDataSource(&dataSource);
|
|
||||||
reply.AddInt32("count",(uint32)(node->IncrementCount()));
|
|
||||||
reply.AddInt32("result",B_OK);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
reply.AddInt32("result",B_BAD_VALUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reply.what = B_REG_RESULT;
|
reply.what = B_REG_RESULT;
|
||||||
|
reply.AddInt32("result", result);
|
||||||
message->SendReply(&reply);
|
message->SendReply(&reply);
|
||||||
if ( node )
|
|
||||||
node->NotifyWatchers();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
BHandler::MessageReceived(message);
|
BHandler::MessageReceived(message);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! \brief Gets the clipboard with the specified name, or adds it, if not yet
|
||||||
|
existent.
|
||||||
|
|
||||||
|
\param name The name of the clipboard to be returned.
|
||||||
|
\return The clipboard with the respective name.
|
||||||
|
*/
|
||||||
|
Clipboard*
|
||||||
|
ClipboardHandler::_GetClipboard(const char *name)
|
||||||
|
{
|
||||||
|
if (!name)
|
||||||
|
name = "system";
|
||||||
|
|
||||||
|
Clipboard *clipboard = NULL;
|
||||||
|
ClipboardMap::iterator it = fClipboards->find(name);
|
||||||
|
if (it != fClipboards->end()) {
|
||||||
|
clipboard = it->second;
|
||||||
|
} else {
|
||||||
|
clipboard = new Clipboard(name);
|
||||||
|
(*fClipboards)[name] = clipboard;
|
||||||
|
}
|
||||||
|
|
||||||
|
return clipboard;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,8 @@
|
|||||||
|
|
||||||
#include <Handler.h>
|
#include <Handler.h>
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
#include "ClipboardTree.h"
|
|
||||||
|
class Clipboard;
|
||||||
|
|
||||||
class ClipboardHandler : public BHandler {
|
class ClipboardHandler : public BHandler {
|
||||||
public:
|
public:
|
||||||
@@ -13,8 +14,13 @@ public:
|
|||||||
virtual ~ClipboardHandler();
|
virtual ~ClipboardHandler();
|
||||||
|
|
||||||
virtual void MessageReceived(BMessage *message);
|
virtual void MessageReceived(BMessage *message);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ClipboardTree fClipboardTree;
|
Clipboard *_GetClipboard(const char *name);
|
||||||
|
|
||||||
|
struct ClipboardMap;
|
||||||
|
|
||||||
|
ClipboardMap *fClipboards;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CLIPBOARD_HANDLER_H
|
#endif // CLIPBOARD_HANDLER_H
|
||||||
|
|||||||
@@ -1,120 +0,0 @@
|
|||||||
// ClipboardTree.cpp
|
|
||||||
|
|
||||||
#include <Message.h>
|
|
||||||
#include <Clipboard.h>
|
|
||||||
|
|
||||||
#include "ClipboardTree.h"
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\class ClipboardTree
|
|
||||||
\brief Implements a tree containing clipboards and their data
|
|
||||||
*/
|
|
||||||
|
|
||||||
// constructor
|
|
||||||
/*! \brief Creates and initializes a ClipboardTree.
|
|
||||||
*/
|
|
||||||
ClipboardTree::ClipboardTree()
|
|
||||||
{
|
|
||||||
fName = "";
|
|
||||||
fCount = 0;
|
|
||||||
fLeftChild = NULL;
|
|
||||||
fRightChild = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// destructor
|
|
||||||
/*! \brief Frees all resources associate with this object.
|
|
||||||
*/
|
|
||||||
ClipboardTree::~ClipboardTree()
|
|
||||||
{
|
|
||||||
if ( fLeftChild )
|
|
||||||
delete fLeftChild;
|
|
||||||
if ( fRightChild )
|
|
||||||
delete fRightChild;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ClipboardTree::AddNode(BString name)
|
|
||||||
{
|
|
||||||
if ( fName == "" )
|
|
||||||
{
|
|
||||||
fName = name;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( fName == name )
|
|
||||||
return;
|
|
||||||
if ( name < fName )
|
|
||||||
{
|
|
||||||
if ( !fLeftChild )
|
|
||||||
fLeftChild = new ClipboardTree;
|
|
||||||
fLeftChild->AddNode(name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( !fRightChild )
|
|
||||||
fRightChild = new ClipboardTree;
|
|
||||||
fRightChild->AddNode(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
ClipboardTree* ClipboardTree::GetNode(BString name)
|
|
||||||
{
|
|
||||||
if ( fName == "" )
|
|
||||||
return NULL;
|
|
||||||
if ( fName == name )
|
|
||||||
return this;
|
|
||||||
if ( name < fName )
|
|
||||||
{
|
|
||||||
if ( !fLeftChild )
|
|
||||||
return NULL;
|
|
||||||
return fLeftChild->GetNode(name);
|
|
||||||
}
|
|
||||||
if ( !fRightChild )
|
|
||||||
return NULL;
|
|
||||||
return fRightChild->GetNode(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 ClipboardTree::GetCount()
|
|
||||||
{
|
|
||||||
return fCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 ClipboardTree::IncrementCount()
|
|
||||||
{
|
|
||||||
fCount++;
|
|
||||||
return fCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
BMessage* ClipboardTree::GetData()
|
|
||||||
{
|
|
||||||
return &fData;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ClipboardTree::SetData(BMessage *data)
|
|
||||||
{
|
|
||||||
fData = *data;
|
|
||||||
}
|
|
||||||
|
|
||||||
BMessenger* ClipboardTree::GetDataSource()
|
|
||||||
{
|
|
||||||
return &fDataSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ClipboardTree::SetDataSource(BMessenger *dataSource)
|
|
||||||
{
|
|
||||||
fDataSource = *dataSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ClipboardTree::AddWatcher(BMessenger *watcher)
|
|
||||||
{
|
|
||||||
return fWatchingService.AddWatcher(*watcher);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ClipboardTree::RemoveWatcher(BMessenger *watcher)
|
|
||||||
{
|
|
||||||
return fWatchingService.RemoveWatcher(*watcher,false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ClipboardTree::NotifyWatchers()
|
|
||||||
{
|
|
||||||
BMessage message(B_CLIPBOARD_CHANGED);
|
|
||||||
fWatchingService.NotifyWatchers(&message,NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
// ClipboardTree.h
|
|
||||||
|
|
||||||
#ifndef CLIPBOARD_TREE_H
|
|
||||||
#define CLIPBOARD_TREE_H
|
|
||||||
|
|
||||||
#include <String.h>
|
|
||||||
#include <Message.h>
|
|
||||||
#include <Messenger.h>
|
|
||||||
#include "WatchingService.h"
|
|
||||||
|
|
||||||
class ClipboardTree {
|
|
||||||
public:
|
|
||||||
ClipboardTree();
|
|
||||||
~ClipboardTree();
|
|
||||||
void AddNode(BString name);
|
|
||||||
ClipboardTree* GetNode(BString name);
|
|
||||||
uint32 GetCount();
|
|
||||||
uint32 IncrementCount();
|
|
||||||
BMessage *GetData();
|
|
||||||
void SetData(BMessage *data);
|
|
||||||
BMessenger *GetDataSource();
|
|
||||||
void SetDataSource(BMessenger *dataSource);
|
|
||||||
bool AddWatcher(BMessenger *watcher);
|
|
||||||
bool RemoveWatcher(BMessenger *watcher);
|
|
||||||
void NotifyWatchers();
|
|
||||||
private:
|
|
||||||
BString fName;
|
|
||||||
BMessage fData;
|
|
||||||
BMessenger fDataSource;
|
|
||||||
ClipboardTree *fLeftChild;
|
|
||||||
ClipboardTree *fRightChild;
|
|
||||||
uint32 fCount;
|
|
||||||
WatchingService fWatchingService;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CLIPBOARD_TREE_H
|
|
||||||
|
|
||||||
@@ -8,8 +8,8 @@ AddResources obos_registrar : registrar.rdef ;
|
|||||||
|
|
||||||
local registrar_sources =
|
local registrar_sources =
|
||||||
AppInfoList.cpp
|
AppInfoList.cpp
|
||||||
|
Clipboard.cpp
|
||||||
ClipboardHandler.cpp
|
ClipboardHandler.cpp
|
||||||
ClipboardTree.cpp
|
|
||||||
Event.cpp
|
Event.cpp
|
||||||
EventMaskWatcher.cpp
|
EventMaskWatcher.cpp
|
||||||
EventQueue.cpp
|
EventQueue.cpp
|
||||||
|
|||||||
Reference in New Issue
Block a user