1/*
2 * Copyright 2002-2010, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Michael Pfeiffer
7 *		Philippe Houdoin
8 */
9#include "TransportMenu.h"
10
11
12#include <Catalog.h>
13#include <MenuItem.h>
14
15
16#undef B_TRANSLATION_CONTEXT
17#define B_TRANSLATION_CONTEXT "TransportMenu"
18
19
20TransportMenu::TransportMenu(const char* title, uint32 what,
21	const BMessenger& messenger, const BString& transportName)
22	:
23	BMenu(title),
24	fWhat(what),
25	fMessenger(messenger),
26	fTransportName(transportName)
27{
28}
29
30
31bool
32TransportMenu::AddDynamicItem(add_state state)
33{
34	if (state != B_INITIAL_ADD)
35		return false;
36
37	BMenuItem* item = RemoveItem((int32)0);
38	while (item != NULL) {
39		delete item;
40		item = RemoveItem((int32)0);
41	}
42
43	BMessage msg;
44	msg.MakeEmpty();
45	msg.what = B_GET_PROPERTY;
46	msg.AddSpecifier("Ports");
47	BMessage reply;
48	if (fMessenger.SendMessage(&msg, &reply) != B_OK)
49		return false;
50
51	BString portId;
52	BString portName;
53	if (reply.FindString("port_id", &portId) != B_OK) {
54		// Show error message in submenu
55		BMessage* portMsg = new BMessage(fWhat);
56		AddItem(new BMenuItem(
57			B_TRANSLATE("No printer found!"), portMsg));
58		return false;
59	}
60
61	// Add ports to submenu
62	for (int32 i = 0; reply.FindString("port_id", i, &portId) == B_OK;
63		i++) {
64		if (reply.FindString("port_name", i, &portName) != B_OK
65			|| !portName.Length())
66			portName = portId;
67
68		// Create menu item in submenu for port
69		BMessage* portMsg = new BMessage(fWhat);
70		portMsg->AddString("name", fTransportName);
71		portMsg->AddString("path", portId);
72		AddItem(new BMenuItem(portName.String(), portMsg));
73	}
74
75	return false;
76}
77