more handling of scripting messages

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17775 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2006-06-07 22:40:28 +00:00
parent 19f75b98e6
commit 1c7004e4e7
+44 -22
View File
@@ -470,31 +470,53 @@ BShelf::Instantiate(BMessage *data)
void void
BShelf::MessageReceived(BMessage *msg) BShelf::MessageReceived(BMessage *msg)
{ {
if (!msg->HasSpecifiers()) {
BHandler::MessageReceived(msg);
}
BMessage replyMsg(B_REPLY); BMessage replyMsg(B_REPLY);
bool handled = false; status_t err = B_BAD_SCRIPT_SYNTAX;
switch (msg->what) { BMessage specifier;
case B_GET_PROPERTY: int32 what;
case B_SET_PROPERTY: { const char *prop;
BMessage specifier; int32 index;
int32 what; if (msg->GetCurrentSpecifier(&index, &specifier, &what, &prop) == B_OK) {
const char *prop; switch (msg->what) {
int32 index; case B_GET_PROPERTY:
if (strcmp(prop, "Replicant") == 0) {
if (msg->GetCurrentSpecifier(&index, &specifier, &what, &prop) != B_OK) BView *replicant = NULL;
ReplicantAt(index, &replicant, NULL, &err);
if (err == B_OK && replicant) {
BMessage archive;
err = replicant->Archive(&archive);
if (err == B_OK)
err = replyMsg.AddMessage("result", &archive);
}
}
break; break;
case B_DELETE_PROPERTY:
if (strcmp(prop, "Replicant") == 0) {
err = DeleteReplicant(index);
}
break;
case B_COUNT_PROPERTIES:
if (strcmp(prop, "Replicant") == 0) {
err = replyMsg.AddInt32("result", CountReplicants());
}
break;
};
}
break; if (err == B_BAD_SCRIPT_SYNTAX) {
} replyMsg.what = B_MESSAGE_NOT_UNDERSTOOD;
}; replyMsg.AddString("message", "Didn't understand the specifier(s)");
if (handled) { } else if (err < B_OK) {
if (msg->what == B_SET_PROPERTY) replyMsg.what = B_ERROR;
replyMsg.AddInt32("error", B_OK); replyMsg.AddString("message", strerror(err));
} else { }
replyMsg.what = B_MESSAGE_NOT_UNDERSTOOD;
replyMsg.AddInt32("error", B_BAD_SCRIPT_SYNTAX); replyMsg.AddInt32("error", err);
replyMsg.AddString("message", "Didn't understand the specifier(s)");
}
msg->SendReply(&replyMsg); msg->SendReply(&replyMsg);
} }