Files
haiku-beta6/src/servers/registrar/ClipboardHandler.cpp
T

176 lines
3.8 KiB
C++
Raw Normal View History

2002-07-21 22:40:07 +00:00
// ClipboardHandler.cpp
#include <Message.h>
2002-10-22 00:08:45 +00:00
#include <RegistrarDefs.h>
2002-07-21 22:40:07 +00:00
#include "ClipboardHandler.h"
2002-07-28 13:37:26 +00:00
/*!
\class ClipboardHandler
\brief Handles all clipboard related requests.
*/
2002-07-21 22:40:07 +00:00
// constructor
2002-07-28 13:37:26 +00:00
/*! \brief Creates and initializes a ClipboardHandler.
*/
2002-07-21 22:40:07 +00:00
ClipboardHandler::ClipboardHandler()
: BHandler()
{
}
// destructor
2002-07-28 13:37:26 +00:00
/*! \brief Frees all resources associate with this object.
*/
2002-07-21 22:40:07 +00:00
ClipboardHandler::~ClipboardHandler()
{
}
// MessageReceived
2002-07-28 13:37:26 +00:00
/*! \brief Overrides the super class version to handle the clipboard specific
messages.
\param message The message to be handled
*/
2002-07-21 22:40:07 +00:00
void
ClipboardHandler::MessageReceived(BMessage *message)
{
2002-10-22 00:08:45 +00:00
BString name;
BMessage reply;
2002-07-21 22:40:07 +00:00
switch (message->what) {
2002-11-09 21:19:49 +00:00
case B_REG_ADD_CLIPBOARD:
2002-10-22 00:08:45 +00:00
{
if ( message->FindString("name",&name) != B_OK )
{
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
else
{
fClipboardTree.AddNode(name);
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_OK);
2002-10-22 00:08:45 +00:00
}
reply.what = B_REG_RESULT;
message->SendReply(&reply);
}
break;
2002-11-09 21:19:49 +00:00
case B_REG_GET_CLIPBOARD_COUNT:
2002-10-22 00:08:45 +00:00
{
if ( message->FindString("name",&name) != B_OK )
{
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
else
{
ClipboardTree *node = fClipboardTree.GetNode(name);
if ( node )
{
reply.AddInt32("count",(uint32)(node->GetCount()));
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_OK);
2002-10-22 00:08:45 +00:00
}
else
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
reply.what = B_REG_RESULT;
message->SendReply(&reply);
}
break;
2002-11-09 21:19:49 +00:00
case B_REG_CLIPBOARD_START_WATCHING:
2002-10-22 00:08:45 +00:00
{
BMessenger target;
if ( (message->FindString("name",&name) != B_OK) ||
(message->FindMessenger("target",&target) != B_OK) )
{
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
else
{
ClipboardTree *node = fClipboardTree.GetNode(name);
if ( node && node->AddWatcher(&target) )
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_OK);
2002-10-22 00:08:45 +00:00
else
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
reply.what = B_REG_RESULT;
message->SendReply(&reply);
}
break;
2002-11-09 21:19:49 +00:00
case B_REG_CLIPBOARD_STOP_WATCHING:
2002-10-22 00:08:45 +00:00
{
BMessenger target;
if ( (message->FindString("name",&name) != B_OK) ||
(message->FindMessenger("target",&target) != B_OK) )
{
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
else
{
ClipboardTree *node = fClipboardTree.GetNode(name);
if ( node && node->RemoveWatcher(&target) )
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_OK);
2002-10-22 00:08:45 +00:00
else
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
reply.what = B_REG_RESULT;
message->SendReply(&reply);
}
break;
2002-11-09 21:19:49 +00:00
case B_REG_DOWNLOAD_CLIPBOARD:
2002-10-22 00:08:45 +00:00
{
if ( message->FindString("name",&name) != B_OK )
{
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
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()));
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_OK);
2002-10-22 00:08:45 +00:00
}
else
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
reply.what = B_REG_RESULT;
message->SendReply(&reply);
}
break;
2002-11-09 21:19:49 +00:00
case B_REG_UPLOAD_CLIPBOARD:
2002-10-22 00:08:45 +00:00
{
BMessage data;
BMessenger dataSource;
ClipboardTree *node = NULL;
if ( (message->FindString("name",&name) != B_OK) ||
(message->FindMessage("data",&data) != B_OK) ||
(message->FindMessenger("data source",&dataSource) != B_OK) )
{
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
else
{
node = fClipboardTree.GetNode(name);
if ( node )
{
node->SetData(&data);
node->SetDataSource(&dataSource);
reply.AddInt32("count",(uint32)(node->IncrementCount()));
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_OK);
2002-10-22 00:08:45 +00:00
}
else
2002-11-02 23:33:33 +00:00
reply.AddInt32("result",B_BAD_VALUE);
2002-10-22 00:08:45 +00:00
}
reply.what = B_REG_RESULT;
message->SendReply(&reply);
if ( node )
node->NotifyWatchers();
}
break;
2002-07-21 22:40:07 +00:00
default:
BHandler::MessageReceived(message);
break;
}
}
2002-10-22 00:08:45 +00:00
2002-11-02 23:33:33 +00:00