Revision: 28851
http://sourceforge.net/p/bibdesk/svn/28851
Author: hofman
Date: 2024-04-06 16:11:05 +0000 (Sat, 06 Apr 2024)
Log Message:
-----------
Update UI when publication's type changes, this can also happen with undo
Modified Paths:
--------------
trunk/bibdesk/BDSKTextImportController.m
Modified: trunk/bibdesk/BDSKTextImportController.m
===================================================================
--- trunk/bibdesk/BDSKTextImportController.m 2024-04-06 15:27:13 UTC (rev
28850)
+++ trunk/bibdesk/BDSKTextImportController.m 2024-04-06 16:11:05 UTC (rev
28851)
@@ -91,6 +91,7 @@
- (void)loadFromFileURL:(NSURL *)url;
- (void)setShowingWebView:(BOOL)showWebView;
- (void)setupTypeUI;
+- (void)updateType;
- (void)updateColumnWidths;
- (void)setType:(NSString *)type;
@@ -286,11 +287,15 @@
- (IBAction)changeTypeOfBibAction:(id)sender{
NSString *type = [[sender selectedItem] title];
- [self setType:type];
+ BibItem *item = [self publication];
+
+ if ([[item pubType] isEqualToString:type])
+ return;
+
+ [item setPubType:type];
[[NSUserDefaults standardUserDefaults] setObject:type
forKey:BDSKPubTypeStringKey];
[[self undoManager] setActionName:NSLocalizedString(@"Change Type",
@"Undo action name")];
- [itemTableView reloadData];
}
- (IBAction)importFromPasteboardAction:(id)sender{
@@ -556,9 +561,11 @@
NSString *changeKey = [[notification userInfo]
objectForKey:BDSKBibItemKeyKey];
- if([changeKey isEqualToString:BDSKCiteKeyString]) {
- [citeKeyField setStringValue:[item citeKey]];
+ if ([changeKey isEqualToString:BDSKCiteKeyString]) {
+ [citeKeyField setStringValue:[item citeKey]];
[self setCiteKeyDuplicateWarning:[item isValidCiteKey:[item citeKey]]
== NO];
+ } else if ([changeKey isEqualToString:BDSKPubTypeString]) {
+ [self updateType];
} else {
[itemTableView reloadData];
}
@@ -706,13 +713,37 @@
[itemTypeButton removeAllItems];
[itemTypeButton addItemsWithTitles:[[BDSKTypeManager sharedManager]
types]];
- NSString *type = [[NSUserDefaults standardUserDefaults]
stringForKey:BDSKPubTypeStringKey];
+ [self updateType];
- [self setType:type];
-
[itemTableView reloadData];
}
+- (void)updateType{
+ NSString *type = [[self publication] pubType];
+
+ [itemTypeButton selectItemWithTitle:type];
+
+ BDSKTypeManager *typeMan = [BDSKTypeManager sharedManager];
+
+ [fields removeAllObjects];
+
+ [fields addObjectsFromArray:[typeMan standardFieldsForType:type]];
+ [fields addNonDuplicateObjectsFromArray:@[BDSKAbstractString,
BDSKAnnoteString]];
+
+ NSMutableArray *extraFields = [NSMutableArray array];
+ NSSet *ignoredFields = [NSSet setWithObjects:BDSKDateAddedString,
BDSKDateModifiedString, BDSKColorString, nil];
+ [[[self publication] pubFields]
enumerateKeysAndObjectsUsingBlock:^(NSString *fieldName, NSString *value, BOOL
*stop){
+ if ([NSString isEmptyAsComplexString:value] == NO && [fields
containsObject:fieldName] == NO && [ignoredFields containsObject:fieldName] ==
NO)
+ [extraFields addObject:fieldName];
+ }];
+ if ([extraFields count]) {
+ [extraFields
sortUsingSelector:@selector(caseInsensitiveNumericCompare:)];
+ [fields addObjectsFromArray:extraFields];
+ }
+
+ [self updateColumnWidths];
+}
+
- (void)setType:(NSString *)type{
[itemTypeButton selectItemWithTitle:type];
@@ -1314,12 +1345,12 @@
- (void)autoDiscoverFromFrameDictionary:(NSDictionary *)metaTagDict {
BDSKTypeManager *typeMan = [BDSKTypeManager sharedManager];
-
+ BibItem *item = [self publication];
+
for (NSString *metaName in metaTagDict) {
NSString *fieldName = [typeMan fieldNameForDublinCoreTerm:metaName];
fieldName = (fieldName ?: [metaName fieldName]);
NSString *fieldValue = [metaTagDict objectForKey:metaName];
- BibItem *item = [self publication];
// Special-case DC.date to get month and year, but still insert
"DC.date"
// to capture the day, which may be useful.
@@ -1353,10 +1384,11 @@
}
- NSString *bibtexType = [typeMan bibTeXTypeForDublinCoreType:[metaTagDict
objectForKey:@"DC.type"]];
- [self setType:(bibtexType ?: @"misc")];
-
- [itemTableView reloadData];
+ NSString *bibtexType = [typeMan bibTeXTypeForDublinCoreType:[metaTagDict
objectForKey:@"DC.type"]] ?: @"misc";
+ if ([[item pubType] isEqualToString:bibtexType])
+ [self updateType];
+ else
+ [item setPubType:bibtexType];
}
- (void)autoDiscoverDataFromFrame:(WebFrame *)frame{
@@ -1468,8 +1500,10 @@
- (void)autoDiscoverFromStringWithPublication:(BibItem *)pub {
BibItem *item = [self publication];
[item setPubFields:[pub pubFields]];
- [self setType:[pub pubType]];
- [itemTableView reloadData];
+ if ([[item pubType] isEqualToString:[pub pubType]])
+ [item setPubType:[pub pubType]];
+ else
+ [self updateType];
}
- (void)autoDiscoverDataFromString:(NSString *)string{
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