Allow setting arbitrary activation strings for menu items

The implementation is presently geared toward only setting various activation strings, as unsetting e.g. a key equivalent won’t restore a potential (previously set) tab trigger etc.
This commit is contained in:
Allan Odgaard
2013-06-23 11:18:52 +07:00
parent 44ce84f79c
commit 9638e4b70c
2 changed files with 20 additions and 31 deletions

View File

@@ -2,6 +2,7 @@
- (void)updateTitle:(NSString*)newTitle;
- (void)setIconForFile:(NSString*)path;
- (void)setKeyEquivalentCxxString:(std::string const&)aKeyEquivalent;
- (void)setActivationString:(NSString*)anActivationString withFont:(NSFont*)aFont;
- (void)setInactiveKeyEquivalentCxxString:(std::string const&)aKeyEquivalent;
- (void)setTabTriggerCxxString:(std::string const&)aTabTrigger;
- (void)setModifiedState:(BOOL)flag;

View File

@@ -124,6 +124,21 @@ static char const* kOakMenuItemTabTrigger = "OakMenuItemTabTrigger";
}
}
- (void)setActivationString:(NSString*)anActivationString withFont:(NSFont*)aFont
{
MenuMutableAttributedString* attributedTitle = [MenuMutableAttributedString new];
NSTextTable* table = [NSTextTable new];
[table setNumberOfColumns:2];
NSFont* font = self.menu.font ?: [NSFont menuFontOfSize:0];
[attributedTitle appendTableCellWithString:self.title table:table textAlignment:NSLeftTextAlignment verticalAlignment:NSTextBlockMiddleAlignment font:font row:0 column:0];
[attributedTitle appendTableCellWithString:anActivationString table:table textAlignment:NSRightTextAlignment verticalAlignment:aFont && aFont.pointSize >= 13 ? NSTextBlockBottomAlignment : NSTextBlockMiddleAlignment font:(aFont ?: font) row:0 column:1];
NSString* plainTitle = self.title;
self.attributedTitle = attributedTitle;
self.title = plainTitle;
}
- (void)updateTitle:(NSString*)newTitle
{
if([self.title isEqualToString:newTitle])
@@ -170,42 +185,15 @@ static char const* kOakMenuItemTabTrigger = "OakMenuItemTabTrigger";
- (void)setInactiveKeyEquivalentCxxString:(std::string const&)aKeyEquivalent
{
objc_setAssociatedObject(self, kOakMenuItemKeyEquivalent, [NSString stringWithCxxString:aKeyEquivalent], OBJC_ASSOCIATION_RETAIN);
if(aKeyEquivalent == NULL_STR || aKeyEquivalent.empty())
return;
MenuMutableAttributedString* attributedTitle = [MenuMutableAttributedString new];
NSTextTable* table = [NSTextTable new];
[table setNumberOfColumns:2];
NSFont* font = self.menu.font ?: [NSFont menuFontOfSize:0];
[attributedTitle appendTableCellWithString:self.title table:table textAlignment:NSLeftTextAlignment verticalAlignment:NSTextBlockMiddleAlignment font:font row:0 column:0];
NSString* keyString = [NSString stringWithCxxString:" " + ns::glyphs_for_event_string(aKeyEquivalent)];
[attributedTitle appendTableCellWithString:keyString table:table textAlignment:NSRightTextAlignment verticalAlignment:NSTextBlockMiddleAlignment font:font row:0 column:1];
NSString* plainTitle = self.title;
self.attributedTitle = attributedTitle;
self.title = plainTitle;
if(aKeyEquivalent != NULL_STR && !aKeyEquivalent.empty())
[self setActivationString:[NSString stringWithCxxString:" " + ns::glyphs_for_event_string(aKeyEquivalent)] withFont:nil];
}
- (void)setTabTriggerCxxString:(std::string const&)aTabTrigger
{
objc_setAssociatedObject(self, kOakMenuItemTabTrigger, [NSString stringWithCxxString:aTabTrigger], OBJC_ASSOCIATION_RETAIN);
if(aTabTrigger == NULL_STR)
return;
MenuMutableAttributedString* attributedTitle = [MenuMutableAttributedString new];
NSTextTable* table = [NSTextTable new];
[table setNumberOfColumns:2];
NSFont* font = self.menu.font ?: [NSFont menuFontOfSize:0];
[attributedTitle appendTableCellWithString:self.title table:table textAlignment:NSLeftTextAlignment verticalAlignment:NSTextBlockMiddleAlignment font:font row:0 column:0];
[attributedTitle appendTableCellWithString:[NSString stringWithCxxString:(" "+aTabTrigger+"⇥")] table:table textAlignment:NSRightTextAlignment
verticalAlignment:font.pointSize >= 13 ? NSTextBlockBottomAlignment : NSTextBlockMiddleAlignment
font:[NSFont menuBarFontOfSize:floor(font.pointSize * 0.85)] row:0 column:1];
NSString* plainTitle = self.title;
self.attributedTitle = attributedTitle;
self.title = plainTitle;
if(aTabTrigger != NULL_STR)
[self setActivationString:[NSString stringWithCxxString:(" "+aTabTrigger+"⇥")] withFont:[NSFont menuBarFontOfSize:floor([(self.menu.font ?: [NSFont menuFontOfSize:0]) pointSize] * 0.85)]];
}
- (void)setModifiedState:(BOOL)flag