Revision: 29755
http://sourceforge.net/p/bibdesk/svn/29755
Author: hofman
Date: 2025-10-22 16:46:47 +0000 (Wed, 22 Oct 2025)
Log Message:
-----------
Update main submenus depending on templates only after templates have changed.
Also update for key equivalents if needed.
Modified Paths:
--------------
trunk/bibdesk/BDSKAppController.h
trunk/bibdesk/BDSKAppController.m
Modified: trunk/bibdesk/BDSKAppController.h
===================================================================
--- trunk/bibdesk/BDSKAppController.h 2025-10-22 16:25:57 UTC (rev 29754)
+++ trunk/bibdesk/BDSKAppController.h 2025-10-22 16:46:47 UTC (rev 29755)
@@ -47,6 +47,9 @@
NSMenu *sidePreviewDisplayMenu;
NSMenu *historyMenu;
NSMenu *shareMenu;
+ BOOL templatedCopyMenuNeeedsUpdate;
+ BOOL previewDisplayMenuNeeedsUpdate;
+ BOOL sidePreviewDisplayMenuNeeedsUpdate;
}
@property (nonatomic, nullable, strong) IBOutlet NSMenu *columnsMenu;
Modified: trunk/bibdesk/BDSKAppController.m
===================================================================
--- trunk/bibdesk/BDSKAppController.m 2025-10-22 16:25:57 UTC (rev 29754)
+++ trunk/bibdesk/BDSKAppController.m 2025-10-22 16:46:47 UTC (rev 29755)
@@ -105,6 +105,10 @@
BDSKOpenLastOpenFiles
};
+@interface BDSKAppController ()
+- (void)handleTemplatesChanged:(NSNotification *)notification;
+@end
+
@implementation BDSKAppController
@synthesize columnsMenu, groupSortMenu, groupFieldMenu, templatedCopyMenu,
previewDisplayMenu, sidePreviewDisplayMenu, historyMenu, shareMenu;
@@ -129,6 +133,17 @@
[sud setObject:fixedTableColumnIdentifiers
forKey:BDSKShownColsNamesKey];
}
+- (id)init {
+ self = [super init];
+ if (self) {
+ templatedCopyMenuNeeedsUpdate = YES;
+ previewDisplayMenuNeeedsUpdate = YES;
+ sidePreviewDisplayMenuNeeedsUpdate = YES;
+ [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleTemplatesChanged:)
name:BDSKExportTemplatesChangedNotification object:nil];
+ }
+ return self;
+}
+
- (void)awakeFromNib{
// Add a Scripts menu; searches in (mainbundle)/Contents/Scripts and
(Library domains)/Application Support/BibDesk/Scripts
[NSApp scriptMenu];
@@ -519,6 +534,12 @@
#pragma mark Menu stuff
+- (void)handleTemplatesChanged:(NSNotification *)notification {
+ templatedCopyMenuNeeedsUpdate = YES;
+ previewDisplayMenuNeeedsUpdate = YES;
+ sidePreviewDisplayMenuNeeedsUpdate = YES;
+}
+
- (BOOL) validateMenuItem:(NSMenuItem*)menuItem{
SEL act = [menuItem action];
@@ -573,7 +594,13 @@
}
// implemented in order to prevent the Copy As > Template menu from being
updated at every key event
-- (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event
target:(id *)target action:(SEL *)action { return NO; }
+- (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event
target:(id *)target action:(SEL *)action {
+ if ((menu == templatedCopyMenu && templatedCopyMenuNeeedsUpdate) ||
+ (menu == previewDisplayMenu && previewDisplayMenuNeeedsUpdate) ||
+ (menu == sidePreviewDisplayMenu && sidePreviewDisplayMenuNeeedsUpdate))
+ [self menuNeedsUpdate:menu];
+ return NO;
+}
- (void)addMenuItemsForHistoryItems:(NSArray *)historyItems toMenu:(NSMenu
*)menu {
for (WebHistoryItem *historyItem in historyItems) {
@@ -591,7 +618,7 @@
- (void)menuNeedsUpdate:(NSMenu *)menu {
if ([menu isEqual:columnsMenu]) {
-
+
// remove all items; then fill it with the items from the current
document
[menu removeAllItems];
@@ -624,34 +651,62 @@
}
} else if ([menu isEqual:templatedCopyMenu]) {
-
- NSArray *styles = [BDSKTemplate allStyleNames];
- NSInteger i = [menu numberOfItems];
- while (i--) {
- if ([[menu itemAtIndex:i] tag] < BDSKDragCopyTemplate)
- break;
- [menu removeItemAtIndex:i];
+
+ if (templatedCopyMenuNeeedsUpdate) {
+ NSArray *styles = [BDSKTemplate allStyleNames];
+ NSInteger i = [menu numberOfItems];
+ while (i--) {
+ if ([[menu itemAtIndex:i] tag] < BDSKDragCopyTemplate)
+ break;
+ [menu removeItemAtIndex:i];
+ }
+
+ [styles enumerateObjectsUsingBlock:^(NSString *style, NSUInteger
idx, BOOL *stop){
+ NSMenuItem *item = [menu addItemWithTitle:style
action:@selector(copyAsAction:) keyEquivalent:@""];
+ [item setTag:BDSKDragCopyTemplate + idx];
+ }];
+
+ templatedCopyMenuNeeedsUpdate = NO;
}
- [styles enumerateObjectsUsingBlock:^(NSString *style, NSUInteger idx,
BOOL *stop){
- NSMenuItem *item = [menu addItemWithTitle:style
action:@selector(copyAsAction:) keyEquivalent:@""];
- [item setTag:BDSKDragCopyTemplate + idx];
- }];
+ } else if ([menu isEqual:previewDisplayMenu]) {
- } else if ([menu isEqual:previewDisplayMenu] || [menu
isEqual:sidePreviewDisplayMenu]) {
-
- NSArray *styles = [BDSKTemplate
allStyleNamesForFormat:(BDSKTemplateFormatRichText |
BDSKTemplateFormatPlainHTML)];
+ if (previewDisplayMenuNeeedsUpdate) {
+ NSArray *styles = [BDSKTemplate
allStyleNamesForFormat:(BDSKTemplateFormatRichText |
BDSKTemplateFormatPlainHTML)];
+
+ NSInteger i = [menu numberOfItems];
+ while (i-- && [[menu itemAtIndex:i] isSeparatorItem] == NO)
+ [menu removeItemAtIndex:i];
+
+ NSMenuItem *item;
+ SEL action = @selector(changePreviewDisplay:);
+ for (NSString *style in styles) {
+ item = [menu addItemWithTitle:style action:action
keyEquivalent:@""];
+ [item setTag:BDSKPreviewDisplayText];
+ [item setRepresentedObject:style];
+ }
+
+ previewDisplayMenuNeeedsUpdate = NO;
+ }
- NSInteger i = [menu numberOfItems];
- while (i-- && [[menu itemAtIndex:i] isSeparatorItem] == NO)
- [menu removeItemAtIndex:i];
+ } else if ([menu isEqual:sidePreviewDisplayMenu]) {
- NSMenuItem *item;
- SEL action = [menu isEqual:previewDisplayMenu] ?
@selector(changePreviewDisplay:) : @selector(changeSidePreviewDisplay:);
- for (NSString *style in styles) {
- item = [menu addItemWithTitle:style action:action
keyEquivalent:@""];
- [item setTag:BDSKPreviewDisplayText];
- [item setRepresentedObject:style];
+ if (sidePreviewDisplayMenuNeeedsUpdate) {
+ NSArray *styles = [BDSKTemplate
allStyleNamesForFormat:(BDSKTemplateFormatRichText |
BDSKTemplateFormatPlainHTML)];
+
+ NSInteger i = [menu numberOfItems];
+ while (i-- && [[menu itemAtIndex:i] isSeparatorItem] == NO)
+ [menu removeItemAtIndex:i];
+
+ NSMenuItem *item;
+ SEL action = @selector(changeSidePreviewDisplay:);
+ for (NSString *style in styles) {
+ item = [menu addItemWithTitle:style action:action
keyEquivalent:@""];
+ [item setTag:BDSKPreviewDisplayText];
+ [item setRepresentedObject:style];
+ }
+
+ sidePreviewDisplayMenuNeeedsUpdate = NO;
}
} else if ([menu isEqual:historyMenu]) {
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit