1313#import " IDESourceCodeEditor.h"
1414#import " DVTSourceTextView.h"
1515
16+ #import " DVTPreferenceSetManager.h"
17+ #import " DVTFontAndColorTheme.h"
18+
1619const CGFloat kDefaultZoomLevel = 0 .1f ;
1720
18- static NSString * const IDESourceCodeEditorDidFinishSetupNotification = @" IDESourceCodeEditorDidFinishSetup" ;
21+ NSString *const IDESourceCodeEditorDidFinishSetupNotification = @" IDESourceCodeEditorDidFinishSetup" ;
22+
23+ NSString *const SCXodeMinimapShowNotification = @" SCXodeMinimapShowNotification" ;
24+ NSString *const SCXodeMinimapHideNotification = @" SCXodeMinimapHideNotification" ;
1925
20- NSString * const SCXodeMinimapShowNotification = @" SCXodeMinimapShowNotification" ;
21- NSString * const SCXodeMinimapHideNotification = @" SCXodeMinimapHideNotification" ;
26+ NSString *const SCXodeMinimapThemeChangeNotification = @" SCXodeMinimapThemeChangeNotification" ;
2227
23- NSString * const SCXodeMinimapIsInitiallyHidden = @" SCXodeMinimapIsInitiallyHidden" ;
28+ NSString *const SCXodeMinimapIsInitiallyHidden = @" SCXodeMinimapIsInitiallyHidden" ;
29+ NSString *const SCXodeMinimapTheme = @" SCXodeMinimapTheme" ;
2430
2531@implementation SCXcodeMinimap
2632
@@ -54,24 +60,62 @@ - (void)createMenuItem
5460 return ;
5561 }
5662
57- NSMenuItem *miniMapItem = [[NSMenuItem alloc ] initWithTitle: @" "
58- action: NULL
59- keyEquivalent: @" M" ];
60- [miniMapItem setKeyEquivalentModifierMask: NSControlKeyMask | NSShiftKeyMask ];
63+ [editMenuItem.submenu addItem: [NSMenuItem separatorItem ]];
6164
62- miniMapItem.target = self;
65+ NSMenuItem *minimapMenuItem = [[NSMenuItem alloc ] initWithTitle: @" Minimap" action: nil keyEquivalent: @" " ];
66+ [editMenuItem.submenu addItem: minimapMenuItem];
6367
64- [editMenuItem.submenu insertItem: [NSMenuItem separatorItem ]
65- atIndex: [editMenuItem.submenu numberOfItems ]];
66- [editMenuItem.submenu insertItem: miniMapItem
67- atIndex: [editMenuItem.submenu numberOfItems ]];
68-
69- if ([[NSUserDefaults standardUserDefaults ] boolForKey: SCXodeMinimapIsInitiallyHidden]) {
70- [self hideMiniMap: miniMapItem];
68+ NSMenu *minimapMenu = [[NSMenu alloc ] init ];
69+ {
70+ NSMenuItem *showHideMinimapItem = [[NSMenuItem alloc ] initWithTitle: @" " action: nil keyEquivalent: @" M" ];
71+ [showHideMinimapItem setKeyEquivalentModifierMask: NSControlKeyMask | NSShiftKeyMask ];
72+ [showHideMinimapItem setTarget: self ];
73+ [minimapMenu addItem: showHideMinimapItem];
74+
75+ if ([[NSUserDefaults standardUserDefaults ] boolForKey: SCXodeMinimapIsInitiallyHidden]) {
76+ [self hideMiniMap: showHideMinimapItem];
77+ }
78+ else {
79+ [self showMiniMap: showHideMinimapItem];
80+ }
81+
82+ [minimapMenu addItem: [NSMenuItem separatorItem ]];
7183 }
72- else {
73- [self showMiniMap: miniMapItem];
84+
85+ {
86+ NSMenuItem *themesMenuItem = [[NSMenuItem alloc ] initWithTitle: @" Theme" action: nil keyEquivalent: @" " ];
87+ [minimapMenu addItem: themesMenuItem];
88+
89+ NSMenu *themesMenu = [[NSMenu alloc ] init ];
90+ {
91+ NSMenuItem *editorThemeMenuItem = [[NSMenuItem alloc ] initWithTitle: @" Editor Theme" action: @selector (setMinimapTheme: ) keyEquivalent: @" " ];
92+ [editorThemeMenuItem setTarget: self ];
93+ [themesMenu addItem: editorThemeMenuItem];
94+
95+ [themesMenu addItem: [NSMenuItem separatorItem ]];
96+
97+ NSArray *themes = [[DVTFontAndColorTheme preferenceSetsManager ] availablePreferenceSets ];
98+ NSArray *builtInThemes = [themes filteredArrayUsingPredicate: [NSPredicate predicateWithFormat: @" SELF .isBuiltIn == YES " ]];
99+ NSArray *userThemes = [themes filteredArrayUsingPredicate: [NSPredicate predicateWithFormat: @" SELF .isBuiltIn == NO " ]];
100+
101+ for (DVTFontAndColorTheme *theme in builtInThemes) {
102+ NSMenuItem *themeMenuItem = [[NSMenuItem alloc ] initWithTitle: theme.localizedName action: @selector (setMinimapTheme: ) keyEquivalent: @" " ];
103+ [themeMenuItem setTarget: self ];
104+ [themesMenu addItem: themeMenuItem];
105+ }
106+
107+ [themesMenu addItem: [NSMenuItem separatorItem ]];
108+
109+ for (DVTFontAndColorTheme *theme in userThemes) {
110+ NSMenuItem *themeMenuItem = [[NSMenuItem alloc ] initWithTitle: theme.localizedName action: @selector (setMinimapTheme: ) keyEquivalent: @" " ];
111+ [themeMenuItem setTarget: self ];
112+ [themesMenu addItem: themeMenuItem];
113+ }
114+ }
115+ [themesMenuItem setSubmenu: themesMenu];
116+
74117 }
118+ [minimapMenuItem setSubmenu: minimapMenu];
75119}
76120
77121- (void )hideMiniMap : (NSMenuItem *)sender
@@ -94,6 +138,17 @@ - (void)showMiniMap:(NSMenuItem *)sender
94138 [[NSNotificationCenter defaultCenter ] postNotificationName: SCXodeMinimapShowNotification object: nil ];
95139}
96140
141+ - (void )setMinimapTheme : (NSMenuItem *)sender
142+ {
143+ if ([sender.menu indexOfItem: sender] == 0 ) {
144+ [[NSUserDefaults standardUserDefaults ] removeObjectForKey: SCXodeMinimapTheme];
145+ } else {
146+ [[NSUserDefaults standardUserDefaults ] setObject: sender.title forKey: SCXodeMinimapTheme];
147+ }
148+
149+ [[NSNotificationCenter defaultCenter ] postNotificationName: SCXodeMinimapThemeChangeNotification object: nil ];
150+ }
151+
97152#pragma mark - Xcode Notification
98153
99154- (void )onDidFinishSetup : (NSNotification *)sender
0 commit comments