void AddPrinterDialog::_FillTransportMenu(BMenu* menu) { BMessenger msgr; if (GetPrinterServerMessenger(msgr) != B_OK) return; for (long idx = 0; ; idx++) { BMessage reply, msg(B_GET_PROPERTY); msg.AddSpecifier("Transport", idx); if (msgr.SendMessage(&msg, &reply) != B_OK) break; BMessenger transport; if (reply.FindMessenger("result", &transport) != B_OK) break; // Got messenger to transport now msg.MakeEmpty(); msg.what = B_GET_PROPERTY; msg.AddSpecifier("Name"); if (transport.SendMessage(&msg, &reply) != B_OK) continue; BString transportName; if (reply.FindString("result", &transportName) != B_OK) continue; // Now get ports... BString portId, portName; int32 error; msg.MakeEmpty(); msg.what = B_GET_PROPERTY; msg.AddSpecifier("Ports"); if (transport.SendMessage(&msg, &reply) != B_OK || reply.FindInt32("error", &error) != B_OK || error != B_OK || (transportName == "IPP" && reply.FindString("port_id", &portId) != B_OK)) { // Transport does not provide list of ports BMessage* menuMsg = new BMessage(kTransportSelectedMsg); menuMsg->AddString("name", transportName); menu->AddItem(new BMenuItem(transportName.String(), menuMsg)); continue; } // Create submenu BMenu* transportMenu = new TransportMenu(transportName.String(), kTransportSelectedMsg, transport, transportName); menu->AddItem(transportMenu); transportMenu->SetRadioMode(true); menu->ItemAt(menu->IndexOf(transportMenu))-> SetMessage(new BMessage(kTransportSelectedMsg)); } }
bool PrinterItem::Remove(BListView* view) { BMessenger msgr; if (GetPrinterServerMessenger(msgr) == B_OK) { BMessage script(B_DELETE_PROPERTY); script.AddSpecifier("Printer", view->IndexOf(this)); BMessage reply; if (msgr.SendMessage(&script,&reply) == B_OK) return true; } return false; }
BString ActivePrinterName() { BMessenger msgr; if (GetPrinterServerMessenger(msgr) != B_OK) return BString(); BMessage getNameOfActivePrinter(B_GET_PROPERTY); getNameOfActivePrinter.AddSpecifier("ActivePrinter"); BMessage reply; msgr.SendMessage(&getNameOfActivePrinter, &reply); BString activePrinterName; reply.FindString("result", &activePrinterName); return activePrinterName; }
void AddPrinterDialog::_AddPrinter(BMessage *msg) { BMessage m(PSRV_MAKE_PRINTER); BMessenger msgr; if (GetPrinterServerMessenger(msgr) != B_OK) return; BString transport; BString transportPath; if (fPrinterText != "Preview") { // Preview printer does not use transport add-on transport = fTransportText; transportPath = fTransportPathText; } m.AddString("driver", fPrinterText.String()); m.AddString("transport", transport.String()); m.AddString("transport path", transportPath.String()); m.AddString("printer name", fNameText.String()); m.AddString("connection", "Local"); msgr.SendMessage(&m); // request print_server to create printer }