diff --git a/Frameworks/BundleMenu/src/BundleItemMenuItem.h b/Frameworks/BundleMenu/src/BundleItemMenuItem.h index 79068cc6..98c260c8 100644 --- a/Frameworks/BundleMenu/src/BundleItemMenuItem.h +++ b/Frameworks/BundleMenu/src/BundleItemMenuItem.h @@ -1,5 +1,3 @@ -#import - struct BundleItemMenuItemAlignment { BundleItemMenuItemAlignment () : maxAlignmentWidth(0), maxRightWidth(0) {} @@ -11,6 +9,10 @@ struct BundleItemMenuItemAlignment { BOOL hasRightPart; } -+ (BundleItemMenuItem*)menuItemWithBundleItem:(bundles::item_ptr const&)bundleItem alignmentData:(BundleItemMenuItemAlignment&)alignment; ++ (BundleItemMenuItem*)menuItemWithName:(std::string const&)name + keyEquivalent:(std::string const&)keyEquiv + tabTrigger:(std::string const&)tabTrigger + action:(SEL)action + alignmentData:(BundleItemMenuItemAlignment&)alignment; - (void)updateAlignment:(BundleItemMenuItemAlignment&)alignment; @end diff --git a/Frameworks/BundleMenu/src/BundleItemMenuItem.mm b/Frameworks/BundleMenu/src/BundleItemMenuItem.mm index 685de0a4..bf966a6b 100644 --- a/Frameworks/BundleMenu/src/BundleItemMenuItem.mm +++ b/Frameworks/BundleMenu/src/BundleItemMenuItem.mm @@ -3,29 +3,45 @@ #import @interface BundleItemMenuItem () -- (BundleItemMenuItem*)initWithBundleItem:(bundles::item_ptr const&)bundleItem alignmentData:(BundleItemMenuItemAlignment&)alignment; +- (BundleItemMenuItem*)initWithName:(std::string const&)name + keyEquivalent:(std::string const&)keyEquiv + tabTrigger:(std::string const&)tabTrigger + action:(SEL)action + alignmentData:(BundleItemMenuItemAlignment&)alignment; - (void)setAttributedTitleWithTitle:(NSAttributedString*)itemTitle equivLeft:(NSAttributedString*)equivLeft equivRight:(NSAttributedString*)equivRight alignmentData:(BundleItemMenuItemAlignment&)alignment; @end @implementation BundleItemMenuItem -+ (BundleItemMenuItem*)menuItemWithBundleItem:(bundles::item_ptr const&)bundleItem alignmentData:(BundleItemMenuItemAlignment&)alignment ++ (BundleItemMenuItem*)menuItemWithName:(std::string const&)name + keyEquivalent:(std::string const&)keyEquiv + tabTrigger:(std::string const&)tabTrigger + action:(SEL)action + alignmentData:(BundleItemMenuItemAlignment&)alignment { - return [[[self alloc] initWithBundleItem:bundleItem alignmentData:alignment] autorelease]; + return [[[self alloc] initWithName:name + keyEquivalent:keyEquiv + tabTrigger:tabTrigger + action:action + alignmentData:alignment] autorelease]; } -- (BundleItemMenuItem*)initWithBundleItem:(bundles::item_ptr const&)bundleItem alignmentData:(BundleItemMenuItemAlignment&)alignment + +- (BundleItemMenuItem*)initWithName:(std::string const&)name + keyEquivalent:(std::string const&)keyEquiv + tabTrigger:(std::string const&)tabTrigger + action:(SEL)action + alignmentData:(BundleItemMenuItemAlignment&)alignment { if ((self = [super init])) { + [self setAction:action]; + NSDictionary* fontAttrs = @{ NSFontAttributeName : [NSFont menuFontOfSize:14] /* passing 0 should return the default size, but it doesn’t */ }; NSDictionary* smallFontAttrs = @{ NSFontAttributeName : [NSFont menuFontOfSize:11] }; - NSAttributedString* title = [[NSAttributedString alloc] initWithString:[NSString stringWithCxxString:bundleItem->name()] attributes:fontAttrs]; + NSAttributedString* title = [[NSAttributedString alloc] initWithString:[NSString stringWithCxxString:name] attributes:fontAttrs]; NSAttributedString* equivLeft = nil; NSAttributedString* equivRight = nil; - std::string const tabTrigger(bundleItem->value_for_field(bundles::kFieldTabTrigger)); - std::string const keyEquiv(bundleItem->value_for_field(bundles::kFieldKeyEquivalent)); - if(tabTrigger != NULL_STR) { equivLeft = [[[NSAttributedString alloc] initWithString:[NSString stringWithCxxString:(" "+tabTrigger+"\u21E5 ")] attributes:smallFontAttrs] autorelease]; diff --git a/Frameworks/BundleMenu/src/BundleMenuDelegate.mm b/Frameworks/BundleMenu/src/BundleMenuDelegate.mm index 3462b097..69457994 100644 --- a/Frameworks/BundleMenu/src/BundleMenuDelegate.mm +++ b/Frameworks/BundleMenu/src/BundleMenuDelegate.mm @@ -60,7 +60,12 @@ OAK_DEBUG_VAR(BundleMenu); default: { - BundleItemMenuItem* menuItem = [BundleItemMenuItem menuItemWithBundleItem:*item alignmentData:alignmentData]; + BundleItemMenuItem* menuItem = [BundleItemMenuItem menuItemWithName:(*item)->name() + keyEquivalent:(*item)->value_for_field(bundles::kFieldKeyEquivalent) + tabTrigger:(*item)->value_for_field(bundles::kFieldTabTrigger) + action:@selector(doBundleItem:) + alignmentData:alignmentData]; + [menuItem setRepresentedObject:[NSString stringWithCxxString:(*item)->uuid()]]; [aMenu addItem:menuItem];