void TermView::HyperLinkMenuState::Prepare(BPoint point, const HyperLink& link) { fLink = link; // open context menu PopUpMenu* menu = new PopUpMenu(fView); BLayoutBuilder::Menu<> menuBuilder(menu); switch (link.GetType()) { case HyperLink::TYPE_URL: menuBuilder .AddItem(B_TRANSLATE("Open link"), kMessageOpenLink) .AddItem(B_TRANSLATE("Copy link location"), kMessageCopyLink); break; case HyperLink::TYPE_PATH: case HyperLink::TYPE_PATH_WITH_LINE: case HyperLink::TYPE_PATH_WITH_LINE_AND_COLUMN: menuBuilder.AddItem(B_TRANSLATE("Open path"), kMessageOpenLink); menuBuilder.AddItem(B_TRANSLATE("Copy path"), kMessageCopyLink); if (fLink.Text() != fLink.Address()) { menuBuilder.AddItem(B_TRANSLATE("Copy absolute path"), kMessageCopyAbsolutePath); } break; } menu->SetTargetForItems(fView); menu->Go(fView->ConvertToScreen(point), true, true, true); }