popup-menu.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #if defined(Hiro_PopupMenu)
  2. @implementation CocoaPopupMenu : NSMenuItem
  3. -(id) initWith:(hiro::mPopupMenu&)menuReference {
  4. if(self = [super initWithTitle:@"" action:nil keyEquivalent:@""]) {
  5. popupMenu = &menuReference;
  6. cocoaPopupMenu = [[NSMenu alloc] initWithTitle:@""];
  7. [self setSubmenu:cocoaPopupMenu];
  8. }
  9. return self;
  10. }
  11. -(NSMenu*) cocoaPopupMenu {
  12. return cocoaPopupMenu;
  13. }
  14. @end
  15. namespace hiro {
  16. auto pPopupMenu::construct() -> void {
  17. @autoreleasepool {
  18. cocoaPopupMenu = [[CocoaPopupMenu alloc] initWith:self()];
  19. }
  20. }
  21. auto pPopupMenu::destruct() -> void {
  22. @autoreleasepool {
  23. [[cocoaPopupMenu cocoaPopupMenu] release];
  24. }
  25. }
  26. auto pPopupMenu::append(sAction action) -> void {
  27. @autoreleasepool {
  28. if(auto pAction = action->self()) {
  29. [[cocoaPopupMenu cocoaPopupMenu] addItem:pAction->cocoaAction];
  30. }
  31. }
  32. }
  33. auto pPopupMenu::remove(sAction action) -> void {
  34. @autoreleasepool {
  35. if(auto pAction = action->self()) {
  36. [[cocoaPopupMenu cocoaPopupMenu] removeItem:pAction->cocoaAction];
  37. }
  38. }
  39. }
  40. auto pPopupMenu::setVisible(bool visible) -> void {
  41. if(!visible) return;
  42. NSEvent* event = [[NSApplication sharedApplication] currentEvent];
  43. [NSMenu popUpContextMenu:[cocoaPopupMenu cocoaPopupMenu] withEvent:event forView:nil];
  44. }
  45. }
  46. #endif