Revision: 14975 http://sourceforge.net/p/skim-app/code/14975 Author: hofman Date: 2025-03-16 17:43:38 +0000 (Sun, 16 Mar 2025) Log Message: ----------- Add a class for a note toolbar below the main toolbar. For now unused.
Modified Paths: -------------- trunk/SKMainWindowController.h trunk/SKMainWindowController.m trunk/SKMainWindowController_Actions.h trunk/SKMainWindowController_Actions.m trunk/Skim.xcodeproj/project.pbxproj Added Paths: ----------- trunk/SKNoteToolbarController.h trunk/SKNoteToolbarController.m Modified: trunk/SKMainWindowController.h =================================================================== --- trunk/SKMainWindowController.h 2025-03-15 17:04:23 UTC (rev 14974) +++ trunk/SKMainWindowController.h 2025-03-16 17:43:38 UTC (rev 14975) @@ -70,7 +70,7 @@ @class PDFAnnotation, PDFSelection, SKGroupedSearchResult; @class SKPDFView, SKSecondaryPDFView, SKPresentationView, SKStatusBar, SKFindController, SKSplitView, SKFieldEditor, SKOverviewView, SKSideWindow; -@class SKLeftSideViewController, SKRightSideViewController, SKMainToolbarController, SKMainTouchBarController, SKProgressController, SKNoteTypeSheetController, SKSnapshotWindowController, SKTransitionController; +@class SKLeftSideViewController, SKRightSideViewController, SKMainToolbarController, SKMainTouchBarController, SKNoteToolbarController, SKProgressController, SKNoteTypeSheetController, SKSnapshotWindowController, SKTransitionController; @interface SKMainWindowController : NSWindowController <SKSnapshotWindowControllerDelegate, SKThumbnailDelegate, SKFindControllerDelegate, SKPDFViewDelegate, SKPDFDocumentDelegate, NSTouchBarDelegate> { SKSplitView *splitView; @@ -92,6 +92,8 @@ SKMainTouchBarController *touchBarController; + SKNoteToolbarController *noteToolbarController; + SKOverviewView *overviewView; NSView *overviewContentView; Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2025-03-15 17:04:23 UTC (rev 14974) +++ trunk/SKMainWindowController.m 2025-03-16 17:43:38 UTC (rev 14975) @@ -106,6 +106,7 @@ #import "SKChainedUndoManager.h" #import "SKThumbnailStamp.h" #import "SKPresentationView.h" +#import "SKNoteToolbarController.h" #define MULTIPLICATION_SIGN_CHARACTER (unichar)0x00d7 @@ -1636,6 +1637,7 @@ if (isPresentation) [NSCursor setHiddenUntilMouseMoves:NO]; [touchBarController overviewChanged]; + [noteToolbarController validateButtons]; } - (void)hideOverviewAnimating:(BOOL)animate completionHandler:(void (^)(void))handler { @@ -1666,6 +1668,7 @@ } completionHandler:^{ [touchBarController overviewChanged]; + [noteToolbarController validateButtons]; [[newKeyView window] makeFirstResponder:newKeyView]; if (handler) handler(); @@ -1674,6 +1677,7 @@ [contentView replaceSubview:overviewContentView with:newView]; [NSLayoutConstraint activateConstraints:constraints]; [touchBarController overviewChanged]; + [noteToolbarController validateButtons]; [[newKeyView window] makeFirstResponder:newKeyView]; if (handler) handler(); Modified: trunk/SKMainWindowController_Actions.h =================================================================== --- trunk/SKMainWindowController_Actions.h 2025-03-15 17:04:23 UTC (rev 14974) +++ trunk/SKMainWindowController_Actions.h 2025-03-16 17:43:38 UTC (rev 14975) @@ -107,6 +107,7 @@ - (IBAction)toggleStatusBar:(nullable id)sender; - (IBAction)toggleSplitPDF:(nullable id)sender; - (IBAction)toggleOverview:(nullable id)sender; +- (IBAction)toggleNoteToolbar:(nullable id)sender ; - (IBAction)toggleReadingBar:(nullable id)sender; - (IBAction)togglePacer:(nullable id)sender; - (IBAction)changePacerSpeed:(nullable id)sender; Modified: trunk/SKMainWindowController_Actions.m =================================================================== --- trunk/SKMainWindowController_Actions.m 2025-03-15 17:04:23 UTC (rev 14974) +++ trunk/SKMainWindowController_Actions.m 2025-03-16 17:43:38 UTC (rev 14975) @@ -82,6 +82,7 @@ #import "SKOverviewView.h" #import "SKPresentationView.h" #import "NSUserDefaults_SKExtensions.h" +#import "SKNoteToolbarController.h" #define STATUSBAR_HEIGHT 22.0 @@ -283,6 +284,7 @@ [notes setValue:wasHidden forKey:@"shouldPrint"]; [pdfView setHideNotes:[pdfView hideNotes] == NO]; [touchBarController handleToolModeChangedNotification:nil]; + [noteToolbarController validateButtons]; } - (IBAction)takeSnapshot:(id)sender{ @@ -1137,6 +1139,22 @@ [[self window] recalculateKeyViewLoop]; } +- (IBAction)toggleNoteToolbar:(id)sender { + if ([self interactionMode] == SKPresentationMode) + return; + if ([noteToolbarController isVisible]) { + NSUInteger i = [[[self window] titlebarAccessoryViewControllers] indexOfObject:noteToolbarController]; + if (i != NSNotFound) + [[self window] removeTitlebarAccessoryViewControllerAtIndex:i]; + } else { + if (noteToolbarController == nil) { + noteToolbarController = [[SKNoteToolbarController alloc] init]; + [noteToolbarController setMainController:self]; + } + [[self window] addTitlebarAccessoryViewController:noteToolbarController]; + } +} + - (IBAction)toggleFullscreen:(id)sender { if ([self canExitFullscreen]) [self exitFullscreen]; Added: trunk/SKNoteToolbarController.h =================================================================== --- trunk/SKNoteToolbarController.h (rev 0) +++ trunk/SKNoteToolbarController.h 2025-03-16 17:43:38 UTC (rev 14975) @@ -0,0 +1,65 @@ +// +// SKNoteToolbarController.h +// Skim +// +// Created by Christiaan Hofman on 16/03/2025. +/* + This software is Copyright (c) 2025 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import <Cocoa/Cocoa.h> + +NS_ASSUME_NONNULL_BEGIN + +@class SKMainWindowController; + +@interface SKNoteToolbarController : NSTitlebarAccessoryViewController { + __weak SKMainWindowController *mainController; + NSSegmentedControl *noteButton; + NSSegmentedControl *colorsButton; + NSSegmentedControl *fontsButton; + NSSegmentedControl *linesButton; +} + +@property (nonatomic, nullable, weak) SKMainWindowController *mainController; +@property (nonatomic, readonly, getter=isVisible) BOOL visible; + +- (void)createNewNote:(nullable id)sender; +- (void)selectColor:(nullable id)sender; +- (void)selectFontSize:(nullable id)sender; +- (void)selectLineWidth:(nullable id)sender; + +- (void)validateButtons; + +@end + +NS_ASSUME_NONNULL_END Added: trunk/SKNoteToolbarController.m =================================================================== --- trunk/SKNoteToolbarController.m (rev 0) +++ trunk/SKNoteToolbarController.m 2025-03-16 17:43:38 UTC (rev 14975) @@ -0,0 +1,225 @@ +// +// SKNoteToolbarController.m +// Skim +// +// Created by Christiaan Hofman on 16/03/2025. +/* + This software is Copyright (c) 2025 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "SKNoteToolbarController.h" +#import "SKMainWindowController.h" +#import "SKPDFView.h" +#import <SkimNotes/SkimNotes.h> +#import "PDFAnnotation_SKExtensions.h" +#import "SKApplicationController.h" +#import "NSImage_SKExtensions.h" +#import "NSMenu_SKExtensions.h" +#import "NSUserDefaults_SKExtensions.h" +#import "NSColor_SKExtensions.h" +#import "NSSegmentedControl_SKExtensions.h" +#import "SKStringConstants.h" + +static char SKDefaultsObservationContext; + +@implementation SKNoteToolbarController + +@synthesize mainController; +@dynamic visible; + +- (void)dealloc { + if (colorsButton) { + @try { [[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:SKSwatchColorsKey context:&SKDefaultsObservationContext]; } + @catch (id e) {} + } +} + +- (BOOL)isVisible { + return [self isViewLoaded] && [[self view] window] != nil; +} + +- (void)loadView { + NSArray *images = @[[NSImage imageNamed:SKImageNameToolbarAddTextNote], + [NSImage imageNamed:SKImageNameToolbarAddAnchoredNote], + [NSImage imageNamed:SKImageNameToolbarAddCircleNote], + [NSImage imageNamed:SKImageNameToolbarAddSquareNote], + [NSImage imageNamed:SKImageNameToolbarAddHighlightNote], + [NSImage imageNamed:SKImageNameToolbarAddUnderlineNote], + [NSImage imageNamed:SKImageNameToolbarAddStrikeOutNote], + [NSImage imageNamed:SKImageNameToolbarAddLineNote], + [NSImage imageNamed:SKImageNameToolbarAddInkNote]]; + noteButton = [NSSegmentedControl segmentedControlWithImages:images trackingMode:NSSegmentSwitchTrackingMomentary target:self action:@selector(createNewNote:)]; + [noteButton setSegmentStyle:NSSegmentStyleSeparated]; + [noteButton setHelp:NSLocalizedString(@"Add New Text Note", @"Tool tip message") forSegment:SKNoteTypeFreeText]; + [noteButton setHelp:NSLocalizedString(@"Add New Anchored Note", @"Tool tip message") forSegment:SKNoteTypeAnchored]; + [noteButton setHelp:NSLocalizedString(@"Add New Circle", @"Tool tip message") forSegment:SKNoteTypeCircle]; + [noteButton setHelp:NSLocalizedString(@"Add New Box", @"Tool tip message") forSegment:SKNoteTypeSquare]; + [noteButton setHelp:NSLocalizedString(@"Add New Highlight", @"Tool tip message") forSegment:SKNoteTypeHighlight]; + [noteButton setHelp:NSLocalizedString(@"Add New Underline", @"Tool tip message") forSegment:SKNoteTypeUnderline]; + [noteButton setHelp:NSLocalizedString(@"Add New Strike Out", @"Tool tip message") forSegment:SKNoteTypeStrikeOut]; + [noteButton setHelp:NSLocalizedString(@"Add New Line", @"Tool tip message") forSegment:SKNoteTypeLine]; + [noteButton setHelp:NSLocalizedString(@"Add New Freehand", @"Tool tip message") forSegment:SKNoteTypeInk]; + [noteButton setTranslatesAutoresizingMaskIntoConstraints:NO]; + + colorsButton = [NSSegmentedControl segmentedControlWithImages:@[[NSImage imageNamed:SKImageNameToolbarColors]] trackingMode:NSSegmentSwitchTrackingMomentary target:nil action:@selector(orderFrontColorPanel:)]; + [colorsButton setTranslatesAutoresizingMaskIntoConstraints:NO]; + NSMenu *menu = [NSMenu menu]; + [colorsButton setMenu:menu forSegment:0]; + [self updateColorsMenu]; + [[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:SKSwatchColorsKey options:0 context:&SKDefaultsObservationContext]; + + fontsButton = [NSSegmentedControl segmentedControlWithImages:@[[NSImage imageNamed:SKImageNameToolbarFonts]] trackingMode:NSSegmentSwitchTrackingMomentary target:nil action:@selector(orderFrontFontPanel:)]; + [fontsButton setTranslatesAutoresizingMaskIntoConstraints:NO]; + menu = [NSMenu menu]; + for (NSInteger i = 9; i < 19; i++) { + [menu addItemWithTitle:[NSString stringWithFormat:@"%ld", (long)i] action:@selector(selectFontSize:) target:self tag:i]; + } + [fontsButton setMenu:menu forSegment:0]; + + linesButton = [NSSegmentedControl segmentedControlWithImages:@[[NSImage imageNamed:SKImageNameToolbarLines]] trackingMode:NSSegmentSwitchTrackingMomentary target:nil action:@selector(orderFrontLineInspector:)]; + [linesButton setTranslatesAutoresizingMaskIntoConstraints:NO]; + menu = [NSMenu menu]; + NSSize size = NSMakeSize(32.0, 16.0); + for (NSInteger i = 1; i < 11; i++) { + NSMenuItem *menuItem = [menu addItemWithTitle:@"" action:@selector(selectLineWidth:) target:self tag:i]; + NSImage *image = [NSImage imageWithSize:size drawingHandler:^(NSRect r){ + [[NSColor blackColor] setStroke]; + NSBezierPath *path = [NSBezierPath bezierPath]; + [path setLineWidth:i]; + [path moveToPoint:NSMakePoint(0.0, 8.0 + 0.5 * (i % 2))]; + [path relativeLineToPoint:NSMakePoint(32.0, 0.0)]; + [path stroke]; + return YES; + }]; + [image setAccessibilityDescription:[NSString stringWithFormat:@"%ld", (long)i]]; + [image setTemplate:YES]; + [menuItem setImage:image]; + } + [linesButton setMenu:menu forSegment:0]; + + [self validateButtons]; + + NSView *view = [[NSView alloc] init]; + [view addSubview:noteButton]; + [view addSubview:colorsButton]; + [view addSubview:fontsButton]; + [view addSubview:linesButton]; + + NSArray *constraints = @[ + [[noteButton leadingAnchor] constraintEqualToAnchor:[view leadingAnchor] constant:10.0], + [[noteButton centerYAnchor] constraintEqualToAnchor:[view centerYAnchor]], + [[colorsButton leadingAnchor] constraintEqualToAnchor:[noteButton trailingAnchor] constant:20.0], + [[colorsButton centerYAnchor] constraintEqualToAnchor:[noteButton centerYAnchor]], + [[fontsButton leadingAnchor] constraintEqualToAnchor:[colorsButton trailingAnchor] constant:8.0], + [[fontsButton centerYAnchor] constraintEqualToAnchor:[noteButton centerYAnchor]], + [[linesButton leadingAnchor] constraintEqualToAnchor:[fontsButton trailingAnchor] constant:8.0], + [[linesButton centerYAnchor] constraintEqualToAnchor:[noteButton centerYAnchor]] + ]; + [NSLayoutConstraint activateConstraints:constraints]; + + [self setView:view]; +} + +- (void)createNewNote:(id)sender { + if ([mainController.pdfView canSelectNote]) { + NSInteger type = [sender selectedSegment]; + [mainController.pdfView addAnnotationWithType:type]; + } else NSBeep(); +} + +- (void)selectColor:(id)sender { + PDFAnnotation *annotation = [mainController.pdfView currentAnnotation]; + NSColor *newColor = [sender respondsToSelector:@selector(color)] ? [sender color] : [sender respondsToSelector:@selector(representedObject)] ? [sender representedObject] : nil; + BOOL isShift = ([NSEvent modifierFlags] & NSEventModifierFlagShift) != 0; + BOOL isAlt = ([NSEvent modifierFlags] & NSEventModifierFlagOption) != 0; + if (isAlt == NO && [sender respondsToSelector:@selector(isAlternate)]) + isAlt = [sender isAlternate]; + if ([annotation isSkimNote]) { + [annotation setColor:newColor alternate:isAlt updateDefaults:isShift]; + } else { + NSString *defaultKey = [mainController.pdfView currentColorDefaultKeyForAlternate:isAlt]; + if (defaultKey) + [[NSUserDefaults standardUserDefaults] setColor:newColor forKey:defaultKey]; + } +} + +- (void)selectFontSize:(id)sender { + PDFAnnotation *annotation = [mainController.pdfView currentAnnotation]; + if ([mainController hasOverview] == NO && [annotation isSkimNote] && [annotation isText]) { + NSFont *font = [[NSFontManager sharedFontManager] convertFont:[annotation font] toSize:[sender tag]]; + [annotation setFont:font]; + if (([NSEvent modifierFlags] & NSEventModifierFlagShift)) { + [[NSUserDefaults standardUserDefaults] setDouble:[font pointSize] forKey:SKFreeTextNoteFontSizeKey]; + } + } +} + +- (void)selectLineWidth:(id)sender { + PDFAnnotation *annotation = [mainController.pdfView currentAnnotation]; + if ([mainController hasOverview] == NO && [annotation hasBorder]) { + BOOL isShift = ([NSEvent modifierFlags] & NSEventModifierFlagShift) != 0; + [annotation setLineWidth:[sender tag] updateDefaults:isShift]; + } +} + +- (void)updateColorsMenu { + NSMenu *menu = [colorsButton menuForSegment:0]; + + [menu removeAllItems]; + + NSSize size = NSMakeSize(16.0, 16.0); + for (NSColor *color in [NSColor favoriteColors]) { + NSMenuItem *item; + NSImage *image = [NSImage imageWithSize:size drawingHandler:^(NSRect dstRect){ + [color drawSwatchInRoundedRect:dstRect]; + return YES; + }]; + [image setAccessibilityDescription:[color accessibilityValue]]; + item = [menu addItemWithTitle:@"" action:@selector(selectColor:) target:self]; + [item setRepresentedObject:color]; + [item setImage:image]; + } +} + +- (void)validateButtons { + [noteButton setEnabled:[mainController hasOverview] == NO && [mainController.pdfView canSelectNote]]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context { + if (context == &SKDefaultsObservationContext) { + [self updateColorsMenu]; + } else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + +@end Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2025-03-15 17:04:23 UTC (rev 14974) +++ trunk/Skim.xcodeproj/project.pbxproj 2025-03-16 17:43:38 UTC (rev 14975) @@ -232,6 +232,7 @@ CEAE1CA0287C7C39003A77DB /* SKGroupView.m in Sources */ = {isa = PBXBuildFile; fileRef = CEAE1C9F287C7C39003A77DB /* SKGroupView.m */; }; CEAF079D0C4139EB00C3ECBB /* SKStatusBar.m in Sources */ = {isa = PBXBuildFile; fileRef = CEAF079B0C4139EB00C3ECBB /* SKStatusBar.m */; }; CEB402C313EDAD6100851D1B /* SKTemporaryData.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB402C213EDAD6100851D1B /* SKTemporaryData.m */; }; + CEB4EC502D87409100CA01A1 /* SKNoteToolbarController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB4EC4F2D87409100CA01A1 /* SKNoteToolbarController.m */; }; CEB735A20C4A8CD6000350F9 /* TransitionShading.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CEB735A10C4A8CD6000350F9 /* TransitionShading.tiff */; }; CEBC0DDD2791C607008686E8 /* NSObject_SKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBC0DDC2791C607008686E8 /* NSObject_SKExtensions.m */; }; CEBCA4C02868A93A00E6376E /* SKLine.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBCA4BF2868A93A00E6376E /* SKLine.m */; }; @@ -1140,6 +1141,8 @@ CEAF079B0C4139EB00C3ECBB /* SKStatusBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKStatusBar.m; sourceTree = "<group>"; }; CEB402C113EDAD6100851D1B /* SKTemporaryData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKTemporaryData.h; sourceTree = "<group>"; }; CEB402C213EDAD6100851D1B /* SKTemporaryData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKTemporaryData.m; sourceTree = "<group>"; }; + CEB4EC4E2D87409100CA01A1 /* SKNoteToolbarController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SKNoteToolbarController.h; sourceTree = "<group>"; }; + CEB4EC4F2D87409100CA01A1 /* SKNoteToolbarController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SKNoteToolbarController.m; sourceTree = "<group>"; }; CEB53FF20F261D1400723C1F /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = zh_TW; path = zh_TW.lproj/Credits.rtf; sourceTree = "<group>"; }; CEB53FF50F261D1400723C1F /* zh_TW */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = zh_TW; path = zh_TW.lproj/InfoPlist.strings; sourceTree = "<group>"; }; CEB53FF80F261D1500723C1F /* zh_TW */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = zh_TW; path = zh_TW.lproj/Localizable.strings; sourceTree = "<group>"; }; @@ -2265,6 +2268,8 @@ CEE54F6B0DA3FB060037169F /* SKMainToolbarController.m */, CE85D73D2280814B0022C560 /* SKMainTouchBarController.h */, CE85D73E2280814B0022C560 /* SKMainTouchBarController.m */, + CEB4EC4E2D87409100CA01A1 /* SKNoteToolbarController.h */, + CEB4EC4F2D87409100CA01A1 /* SKNoteToolbarController.m */, CE8BEFE1115F75590029020F /* SKSideViewController.h */, CE8BEFE2115F75590029020F /* SKSideViewController.m */, CE8BF025115F7C390029020F /* SKLeftSideViewController.h */, @@ -2899,6 +2904,7 @@ CE6DC7BB0D689138003A072F /* PDFDocument_SKExtensions.m in Sources */, CE2E9A592C14D2F300044B01 /* SKSnapshotConfiguration.m in Sources */, CEA8FCD60D89C34A00E8A6F4 /* SKAnimatedBorderlessWindow.m in Sources */, + CEB4EC502D87409100CA01A1 /* SKNoteToolbarController.m in Sources */, CE199DFD0D957A16009B2055 /* SKAnnotationTypeImageCell.m in Sources */, CEE54D880DA2E37B0037169F /* PDFAnnotation_SKExtensions.m in Sources */, CEE54D930DA2E5E10037169F /* PDFAnnotationCircle_SKExtensions.m in Sources */, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit