mirror of
https://github.com/coteditor/CotEditor.git
synced 2024-09-11 11:25:57 +03:00
Migrate Appearance settings pane to SwiftUI
This commit is contained in:
parent
a56e5f0f68
commit
e73a435009
@ -7,8 +7,7 @@
|
||||
|
||||
- Make the encoding priority view undoable.
|
||||
- [trivial] Enable delete selected separators in the encoding priority view with the Delete key.
|
||||
- [dev] Migrate General, Window, Edit, and Format settings panes to SwiftUI.
|
||||
- [dev] Migrate syntax editor to SwiftUI.
|
||||
- [dev] Migrate the settings window and syntax editor to SwiftUI.
|
||||
|
||||
|
||||
### Fixes
|
||||
|
@ -48,8 +48,8 @@
|
||||
2A10C5FA1FD25D04002AB5AE /* Selector+Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A10C5F91FD25D04002AB5AE /* Selector+Codable.swift */; };
|
||||
2A10C5FB1FD25D04002AB5AE /* Selector+Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A10C5F91FD25D04002AB5AE /* Selector+Codable.swift */; };
|
||||
2A10D10A1E708CDF0027192A /* KeyBindingTreeView.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A10D1081E708CDF0027192A /* KeyBindingTreeView.storyboard */; };
|
||||
2A10D1281E714D230027192A /* AppearancePane.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A10D1261E714D230027192A /* AppearancePane.storyboard */; };
|
||||
2A10D1381E715E5B0027192A /* SyntaxListView.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A10D1361E715E5B0027192A /* SyntaxListView.storyboard */; };
|
||||
2A10D1281E714D230027192A /* ThemeView.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A10D1261E714D230027192A /* ThemeView.storyboard */; };
|
||||
2A1125C123F180FF006A1DB2 /* LineRangeCacheableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A1125C023F180FF006A1DB2 /* LineRangeCacheableTests.swift */; };
|
||||
2A1125C323F1A86B006A1DB2 /* LineRangeCacheable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A1125C223F1A86B006A1DB2 /* LineRangeCacheable.swift */; };
|
||||
2A1125C423F1A86B006A1DB2 /* LineRangeCacheable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A1125C223F1A86B006A1DB2 /* LineRangeCacheable.swift */; };
|
||||
@ -148,8 +148,8 @@
|
||||
2A26158D2979052C008C2240 /* SyntaxObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A26158B2979052C008C2240 /* SyntaxObject.swift */; };
|
||||
2A2747732111909400795954 /* String+Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2747722111909400795954 /* String+Diff.swift */; };
|
||||
2A2747742111909400795954 /* String+Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2747722111909400795954 /* String+Diff.swift */; };
|
||||
2A2792921D1DACC400F3FC5D /* AppearancePaneController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2792911D1DACC400F3FC5D /* AppearancePaneController.swift */; };
|
||||
2A2792931D1DACC400F3FC5D /* AppearancePaneController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2792911D1DACC400F3FC5D /* AppearancePaneController.swift */; };
|
||||
2A2792921D1DACC400F3FC5D /* ThemeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2792911D1DACC400F3FC5D /* ThemeViewController.swift */; };
|
||||
2A2792931D1DACC400F3FC5D /* ThemeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2792911D1DACC400F3FC5D /* ThemeViewController.swift */; };
|
||||
2A2792951D1DBDAC00F3FC5D /* String+Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2792941D1DBDAC00F3FC5D /* String+Constants.swift */; };
|
||||
2A2792961D1DBDAC00F3FC5D /* String+Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2792941D1DBDAC00F3FC5D /* String+Constants.swift */; };
|
||||
2A2792981D1E57DA00F3FC5D /* SyntaxListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2792971D1E57DA00F3FC5D /* SyntaxListViewController.swift */; };
|
||||
@ -175,8 +175,6 @@
|
||||
2A36E36F2AF9ED0B00A73534 /* Sparkle.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2A36E3702AF9ED0B00A73534 /* Sparkle.xcstrings */; };
|
||||
2A38FAFD1D1C67050032231A /* DraggableArrayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A38FAFC1D1C67050032231A /* DraggableArrayController.swift */; };
|
||||
2A38FAFE1D1C67050032231A /* DraggableArrayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A38FAFC1D1C67050032231A /* DraggableArrayController.swift */; };
|
||||
2A39F15726F74C2500B52876 /* AccessibleStepper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A39F15626F74C2500B52876 /* AccessibleStepper.swift */; };
|
||||
2A39F15826F74C2500B52876 /* AccessibleStepper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A39F15626F74C2500B52876 /* AccessibleStepper.swift */; };
|
||||
2A3A19DF2068A76600516DE4 /* NSTextView+MultipleReplace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3A19DE2068A76600516DE4 /* NSTextView+MultipleReplace.swift */; };
|
||||
2A3A19E02068A76600516DE4 /* NSTextView+MultipleReplace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3A19DE2068A76600516DE4 /* NSTextView+MultipleReplace.swift */; };
|
||||
2A3A19E2206C9A0700516DE4 /* NSTextView+BracePair.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3A19E1206C9A0700516DE4 /* NSTextView+BracePair.swift */; };
|
||||
@ -216,8 +214,6 @@
|
||||
2A476CB11D09D0500088E37A /* FontExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A476CB01D09D0500088E37A /* FontExtensionTests.swift */; };
|
||||
2A478F3F22BE743200AEA45E /* NSTextView+Ligature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A478F3E22BE743200AEA45E /* NSTextView+Ligature.swift */; };
|
||||
2A478F4022BE743200AEA45E /* NSTextView+Ligature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A478F3E22BE743200AEA45E /* NSTextView+Ligature.swift */; };
|
||||
2A479C821D8C15A600EEEFC2 /* CenteringTextFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A479C811D8C15A600EEEFC2 /* CenteringTextFieldCell.swift */; };
|
||||
2A479C831D8C15A600EEEFC2 /* CenteringTextFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A479C811D8C15A600EEEFC2 /* CenteringTextFieldCell.swift */; };
|
||||
2A47CD3821D340040094F62F /* NSValidatedUserInterfaceItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A47CD3721D340030094F62F /* NSValidatedUserInterfaceItem.swift */; };
|
||||
2A47CD3921D340040094F62F /* NSValidatedUserInterfaceItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A47CD3721D340030094F62F /* NSValidatedUserInterfaceItem.swift */; };
|
||||
2A484A39236579A7006FFD14 /* NSLayoutManager+ValidationIgnorable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A484A38236579A7006FFD14 /* NSLayoutManager+ValidationIgnorable.swift */; };
|
||||
@ -323,10 +319,12 @@
|
||||
2A6566E92B73BBB400008669 /* SyntaxEdit.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2AA6E0B82B744FF300E536F8 /* SyntaxEdit.xcstrings */; };
|
||||
2A657D1D2033ED6B00C2611C /* DefaultInitializable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A657D1C2033ED6B00C2611C /* DefaultInitializable.swift */; };
|
||||
2A657D1E2033ED6B00C2611C /* DefaultInitializable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A657D1C2033ED6B00C2611C /* DefaultInitializable.swift */; };
|
||||
2A65EC3B2B80C667008096C5 /* ThemeEditor.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2A65EC3A2B80C667008096C5 /* ThemeEditor.xcstrings */; };
|
||||
2A65EC3C2B80C667008096C5 /* ThemeEditor.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2A65EC3A2B80C667008096C5 /* ThemeEditor.xcstrings */; };
|
||||
2A65EC262B80C01B008096C5 /* FontPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A65EC252B80C01B008096C5 /* FontPicker.swift */; };
|
||||
2A65EC272B80C01B008096C5 /* FontPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A65EC252B80C01B008096C5 /* FontPicker.swift */; };
|
||||
2A65EC2A2B80C168008096C5 /* AppearanceSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A65EC292B80C168008096C5 /* AppearanceSettingsView.swift */; };
|
||||
2A65EC2B2B80C168008096C5 /* AppearanceSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A65EC292B80C168008096C5 /* AppearanceSettingsView.swift */; };
|
||||
2A65EC3B2B80C667008096C5 /* ThemeEditor.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2A65EC3A2B80C667008096C5 /* ThemeEditor.xcstrings */; };
|
||||
2A65EC3C2B80C667008096C5 /* ThemeEditor.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2A65EC3A2B80C667008096C5 /* ThemeEditor.xcstrings */; };
|
||||
2A6602D01D05BD72003E8D87 /* StatusBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A6602CE1D05BD72003E8D87 /* StatusBar.storyboard */; };
|
||||
2A685F6A2027729000A130A4 /* NSAppleEventManager+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A685F692027729000A130A4 /* NSAppleEventManager+Additions.swift */; };
|
||||
2A685F6B2027729000A130A4 /* NSAppleEventManager+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A685F692027729000A130A4 /* NSAppleEventManager+Additions.swift */; };
|
||||
@ -592,8 +590,6 @@
|
||||
2AC186DE1E2F4264002F4D27 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC186DC1E2F4264002F4D27 /* Debug.swift */; };
|
||||
2AC2462E1D1BC70C00E46CFA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC2462D1D1BC70C00E46CFA /* AppDelegate.swift */; };
|
||||
2AC2462F1D1BC70C00E46CFA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC2462D1D1BC70C00E46CFA /* AppDelegate.swift */; };
|
||||
2AC3845320C929950003F213 /* OpacitySampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC3845220C929950003F213 /* OpacitySampleView.swift */; };
|
||||
2AC3845420C929950003F213 /* OpacitySampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC3845220C929950003F213 /* OpacitySampleView.swift */; };
|
||||
2AC39F731E8AC80E009F97D5 /* CollectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC39F721E8AC80E009F97D5 /* CollectionTests.swift */; };
|
||||
2AC434F31D494EA700980E66 /* SyntaxManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AB8C7BA1D49283400EFC3BC /* SyntaxManager.swift */; };
|
||||
2AC434F41D494EA800980E66 /* SyntaxManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AB8C7BA1D49283400EFC3BC /* SyntaxManager.swift */; };
|
||||
@ -640,17 +636,19 @@
|
||||
2ACDA29B2B81E8BF00B2EBA8 /* SnippetsSettings.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2ACDA29C2B81E8BF00B2EBA8 /* SnippetsSettings.xcstrings */; };
|
||||
2ACDA29D2B81E8C300B2EBA8 /* IssueReport.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2ACDA29F2B81E8C300B2EBA8 /* IssueReport.xcstrings */; };
|
||||
2ACDA29E2B81E8C300B2EBA8 /* IssueReport.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2ACDA29F2B81E8C300B2EBA8 /* IssueReport.xcstrings */; };
|
||||
2ACDA2A52B81EE0E00B2EBA8 /* AppearanceSettings.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2ACDA2A72B81EE0E00B2EBA8 /* AppearanceSettings.xcstrings */; };
|
||||
2ACDA2A62B81EE0E00B2EBA8 /* AppearanceSettings.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2ACDA2A72B81EE0E00B2EBA8 /* AppearanceSettings.xcstrings */; };
|
||||
2ACDC0911D1726BD009B72D6 /* DotView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0901D1726BD009B72D6 /* DotView.swift */; };
|
||||
2ACDC0921D1726BD009B72D6 /* DotView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0901D1726BD009B72D6 /* DotView.swift */; };
|
||||
2ACDC0971D172B2A009B72D6 /* PaddingTextFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0961D172B2A009B72D6 /* PaddingTextFieldCell.swift */; };
|
||||
2ACDC0981D172B2A009B72D6 /* PaddingTextFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0961D172B2A009B72D6 /* PaddingTextFieldCell.swift */; };
|
||||
2ACDC09A1D172CDE009B72D6 /* AntialiasingTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0991D172CDE009B72D6 /* AntialiasingTextField.swift */; };
|
||||
2ACDC09B1D172CDE009B72D6 /* AntialiasingTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0991D172CDE009B72D6 /* AntialiasingTextField.swift */; };
|
||||
2ACDC09A1D172CDE009B72D6 /* AntialiasingText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0991D172CDE009B72D6 /* AntialiasingText.swift */; };
|
||||
2ACDC09B1D172CDE009B72D6 /* AntialiasingText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0991D172CDE009B72D6 /* AntialiasingText.swift */; };
|
||||
2ACDC0A31D173250009B72D6 /* InspectorTabSegmentedControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0A21D173250009B72D6 /* InspectorTabSegmentedControl.swift */; };
|
||||
2ACDC0A41D173250009B72D6 /* InspectorTabSegmentedControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0A21D173250009B72D6 /* InspectorTabSegmentedControl.swift */; };
|
||||
2ACDC0A61D17350A009B72D6 /* InspectorTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0A51D17350A009B72D6 /* InspectorTabView.swift */; };
|
||||
2ACDC0A71D17350A009B72D6 /* InspectorTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACDC0A51D17350A009B72D6 /* InspectorTabView.swift */; };
|
||||
2ACDE28D2406B9C000FC31EC /* AppearancePane.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A10D1261E714D230027192A /* AppearancePane.storyboard */; };
|
||||
2ACDE28D2406B9C000FC31EC /* ThemeView.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A10D1261E714D230027192A /* ThemeView.storyboard */; };
|
||||
2ACDE2952406B9C000FC31EC /* StatusBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A6602CE1D05BD72003E8D87 /* StatusBar.storyboard */; };
|
||||
2ACDE2962406B9C000FC31EC /* NavigationBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A5F7CA31D152589001D83BC /* NavigationBar.storyboard */; };
|
||||
2ACDE2992406B9C000FC31EC /* SnippetsPane.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2ADF3BFF1E6D7345009125BB /* SnippetsPane.storyboard */; };
|
||||
@ -849,8 +847,8 @@
|
||||
2A10C5F61FD19237002AB5AE /* KeyBinding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBinding.swift; sourceTree = "<group>"; };
|
||||
2A10C5F91FD25D04002AB5AE /* Selector+Codable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Selector+Codable.swift"; sourceTree = "<group>"; };
|
||||
2A10D1091E708CDF0027192A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/KeyBindingTreeView.storyboard; sourceTree = "<group>"; };
|
||||
2A10D1271E714D230027192A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/AppearancePane.storyboard; sourceTree = "<group>"; };
|
||||
2A10D1371E715E5B0027192A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/SyntaxListView.storyboard; sourceTree = "<group>"; };
|
||||
2A10D1271E714D230027192A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/ThemeView.storyboard; sourceTree = "<group>"; };
|
||||
2A1125C023F180FF006A1DB2 /* LineRangeCacheableTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineRangeCacheableTests.swift; sourceTree = "<group>"; };
|
||||
2A1125C223F1A86B006A1DB2 /* LineRangeCacheable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineRangeCacheable.swift; sourceTree = "<group>"; };
|
||||
2A1125C523F6EFB2006A1DB2 /* URLDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLDetector.swift; sourceTree = "<group>"; };
|
||||
@ -905,7 +903,7 @@
|
||||
2A2615882977FCF6008C2240 /* SubmitButtonGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubmitButtonGroup.swift; sourceTree = "<group>"; };
|
||||
2A26158B2979052C008C2240 /* SyntaxObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyntaxObject.swift; sourceTree = "<group>"; };
|
||||
2A2747722111909400795954 /* String+Diff.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Diff.swift"; sourceTree = "<group>"; };
|
||||
2A2792911D1DACC400F3FC5D /* AppearancePaneController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppearancePaneController.swift; sourceTree = "<group>"; };
|
||||
2A2792911D1DACC400F3FC5D /* ThemeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThemeViewController.swift; sourceTree = "<group>"; };
|
||||
2A2792941D1DBDAC00F3FC5D /* String+Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Constants.swift"; sourceTree = "<group>"; };
|
||||
2A2792971D1E57DA00F3FC5D /* SyntaxListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SyntaxListViewController.swift; sourceTree = "<group>"; };
|
||||
2A2B085F28046E3B0028D733 /* WarningInspectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningInspectorView.swift; sourceTree = "<group>"; };
|
||||
@ -919,7 +917,6 @@
|
||||
2A36CE7B1FF654C000020702 /* NSTextView+Snippet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSTextView+Snippet.swift"; sourceTree = "<group>"; };
|
||||
2A36E3702AF9ED0B00A73534 /* Sparkle.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = Sparkle.xcstrings; path = mul.lproj/Sparkle.xcstrings; sourceTree = "<group>"; };
|
||||
2A38FAFC1D1C67050032231A /* DraggableArrayController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DraggableArrayController.swift; sourceTree = "<group>"; };
|
||||
2A39F15626F74C2500B52876 /* AccessibleStepper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibleStepper.swift; sourceTree = "<group>"; };
|
||||
2A3A19DE2068A76600516DE4 /* NSTextView+MultipleReplace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSTextView+MultipleReplace.swift"; sourceTree = "<group>"; };
|
||||
2A3A19E1206C9A0700516DE4 /* NSTextView+BracePair.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSTextView+BracePair.swift"; sourceTree = "<group>"; };
|
||||
2A3A758D19E77C84001DAB88 /* Syntaxes */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Syntaxes; sourceTree = "<group>"; };
|
||||
@ -947,7 +944,6 @@
|
||||
2A476CAD1D09C8C80088E37A /* URLExtensionsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLExtensionsTests.swift; sourceTree = "<group>"; };
|
||||
2A476CB01D09D0500088E37A /* FontExtensionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FontExtensionTests.swift; sourceTree = "<group>"; };
|
||||
2A478F3E22BE743200AEA45E /* NSTextView+Ligature.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSTextView+Ligature.swift"; sourceTree = "<group>"; };
|
||||
2A479C811D8C15A600EEEFC2 /* CenteringTextFieldCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CenteringTextFieldCell.swift; sourceTree = "<group>"; };
|
||||
2A47CD3721D340030094F62F /* NSValidatedUserInterfaceItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSValidatedUserInterfaceItem.swift; sourceTree = "<group>"; };
|
||||
2A484A38236579A7006FFD14 /* NSLayoutManager+ValidationIgnorable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSLayoutManager+ValidationIgnorable.swift"; sourceTree = "<group>"; };
|
||||
2A4A7D122856FF340085D2E7 /* HelpButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpButton.swift; sourceTree = "<group>"; };
|
||||
@ -1008,8 +1004,9 @@
|
||||
2A64F2471D26327C001B229F /* Shortcut+Error.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Shortcut+Error.swift"; sourceTree = "<group>"; };
|
||||
2A64F24A1D26615A001B229F /* KeyBindingItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyBindingItem.swift; sourceTree = "<group>"; };
|
||||
2A657D1C2033ED6B00C2611C /* DefaultInitializable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultInitializable.swift; sourceTree = "<group>"; };
|
||||
2A65EC3A2B80C667008096C5 /* ThemeEditor.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = ThemeEditor.xcstrings; path = mul.lproj/ThemeEditor.xcstrings; sourceTree = "<group>"; };
|
||||
2A65EC252B80C01B008096C5 /* FontPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FontPicker.swift; sourceTree = "<group>"; };
|
||||
2A65EC292B80C168008096C5 /* AppearanceSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearanceSettingsView.swift; sourceTree = "<group>"; };
|
||||
2A65EC3A2B80C667008096C5 /* ThemeEditor.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = ThemeEditor.xcstrings; path = mul.lproj/ThemeEditor.xcstrings; sourceTree = "<group>"; };
|
||||
2A6602CF1D05BD72003E8D87 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/StatusBar.storyboard; sourceTree = "<group>"; };
|
||||
2A685F692027729000A130A4 /* NSAppleEventManager+Additions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSAppleEventManager+Additions.swift"; sourceTree = "<group>"; };
|
||||
2A68722E288A5C44006D6B41 /* DraggableHostingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DraggableHostingView.swift; sourceTree = "<group>"; };
|
||||
@ -1162,7 +1159,6 @@
|
||||
2AC186D91E2F414D002F4D27 /* NSDocument+ErrorHandling.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSDocument+ErrorHandling.swift"; sourceTree = "<group>"; };
|
||||
2AC186DC1E2F4264002F4D27 /* Debug.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Debug.swift; sourceTree = "<group>"; };
|
||||
2AC2462D1D1BC70C00E46CFA /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
2AC3845220C929950003F213 /* OpacitySampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpacitySampleView.swift; sourceTree = "<group>"; };
|
||||
2AC39F721E8AC80E009F97D5 /* CollectionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionTests.swift; sourceTree = "<group>"; };
|
||||
2AC4E5D127A6C0300052A4DD /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/UnicodeBlock.strings"; sourceTree = "<group>"; };
|
||||
2AC52BDA1D48CC0E007D6371 /* DispatchQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DispatchQueue.swift; sourceTree = "<group>"; };
|
||||
@ -1191,9 +1187,10 @@
|
||||
2ACDA2992B81E8BB00B2EBA8 /* WindowSettings.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = WindowSettings.xcstrings; path = mul.lproj/WindowSettings.xcstrings; sourceTree = "<group>"; };
|
||||
2ACDA29C2B81E8BF00B2EBA8 /* SnippetsSettings.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = SnippetsSettings.xcstrings; path = mul.lproj/SnippetsSettings.xcstrings; sourceTree = "<group>"; };
|
||||
2ACDA29F2B81E8C300B2EBA8 /* IssueReport.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = IssueReport.xcstrings; path = mul.lproj/IssueReport.xcstrings; sourceTree = "<group>"; };
|
||||
2ACDA2A72B81EE0E00B2EBA8 /* AppearanceSettings.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = AppearanceSettings.xcstrings; path = mul.lproj/AppearanceSettings.xcstrings; sourceTree = "<group>"; };
|
||||
2ACDC0901D1726BD009B72D6 /* DotView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DotView.swift; sourceTree = "<group>"; };
|
||||
2ACDC0961D172B2A009B72D6 /* PaddingTextFieldCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaddingTextFieldCell.swift; sourceTree = "<group>"; };
|
||||
2ACDC0991D172CDE009B72D6 /* AntialiasingTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AntialiasingTextField.swift; sourceTree = "<group>"; };
|
||||
2ACDC0991D172CDE009B72D6 /* AntialiasingText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AntialiasingText.swift; sourceTree = "<group>"; };
|
||||
2ACDC0A21D173250009B72D6 /* InspectorTabSegmentedControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InspectorTabSegmentedControl.swift; sourceTree = "<group>"; };
|
||||
2ACDC0A51D17350A009B72D6 /* InspectorTabView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InspectorTabView.swift; sourceTree = "<group>"; };
|
||||
2ACF23AD26302A4C002B5E10 /* Theme+Syntax.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Theme+Syntax.swift"; sourceTree = "<group>"; };
|
||||
@ -1246,8 +1243,8 @@
|
||||
2AF0C1241D3DA44900B6FCB6 /* FourCharCode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FourCharCode.swift; sourceTree = "<group>"; };
|
||||
2AF0C1271D3DA6F800B6FCB6 /* FourCharCodeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FourCharCodeTests.swift; sourceTree = "<group>"; };
|
||||
2AF0C12C1D3DABD000B6FCB6 /* Document+ScriptingSupport.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Document+ScriptingSupport.swift"; sourceTree = "<group>"; };
|
||||
2AF1229E2B7A3D50004BA1FF /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/AppearancePane.xcstrings; sourceTree = "<group>"; };
|
||||
2AF1229F2B7A3D50004BA1FF /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/KeyBindingTreeView.xcstrings; sourceTree = "<group>"; };
|
||||
2AF1229E2B7A3D50004BA1FF /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/ThemeView.xcstrings; sourceTree = "<group>"; };
|
||||
2AF122A22B7A3D50004BA1FF /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/SyntaxListView.xcstrings; sourceTree = "<group>"; };
|
||||
2AF122A42B7A3D50004BA1FF /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/SnippetsPane.xcstrings; sourceTree = "<group>"; };
|
||||
2AF1D85721B8D9250060BC04 /* NSRegularExpression+Additions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSRegularExpression+Additions.swift"; sourceTree = "<group>"; };
|
||||
@ -1373,7 +1370,7 @@
|
||||
2A149DAF19016AD800A9D6EF /* Settings */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2A10D1261E714D230027192A /* AppearancePane.storyboard */,
|
||||
2A10D1261E714D230027192A /* ThemeView.storyboard */,
|
||||
2A10D1361E715E5B0027192A /* SyntaxListView.storyboard */,
|
||||
2ADF3BFF1E6D7345009125BB /* SnippetsPane.storyboard */,
|
||||
2A10D1081E708CDF0027192A /* KeyBindingTreeView.storyboard */,
|
||||
@ -1385,7 +1382,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2A78BFA61D1B05FB00A583D2 /* GeneralSettingsView.swift */,
|
||||
2A2792911D1DACC400F3FC5D /* AppearancePaneController.swift */,
|
||||
2A65EC292B80C168008096C5 /* AppearanceSettingsView.swift */,
|
||||
2A78BFA31D1B02ED00A583D2 /* WindowSettingsView.swift */,
|
||||
2AFFA7C52B170097005652CD /* EditSettingsView.swift */,
|
||||
2ACDA2522B813FA500B2EBA8 /* SnippetsSettingsView.swift */,
|
||||
@ -1452,20 +1449,16 @@
|
||||
2AE95A192A86270000E85CF5 /* HoleContentView.swift */,
|
||||
2A68722E288A5C44006D6B41 /* DraggableHostingView.swift */,
|
||||
2ACDC0901D1726BD009B72D6 /* DotView.swift */,
|
||||
2AC3845220C929950003F213 /* OpacitySampleView.swift */,
|
||||
2A0DD6321E655C4A001CAAA3 /* TokenTextView.swift */,
|
||||
2ACDC0991D172CDE009B72D6 /* AntialiasingTextField.swift */,
|
||||
2AD8D7492064AD83000BEFDB /* NumberTextField.swift */,
|
||||
2AACB1CC1D195ABD0073775B /* ShortcutField.swift */,
|
||||
2A5DCE4E1D185F1B00D5D74C /* CharacterField.swift */,
|
||||
2A1814BD21CFC9CF00602214 /* RegularExpressionTextField.swift */,
|
||||
2A63A9D724E8C8F70017ACBB /* OutlinePopUpButton.swift */,
|
||||
2A19AF852AE0D15300EFFDCB /* FormPopUpButton.swift */,
|
||||
2A479C811D8C15A600EEEFC2 /* CenteringTextFieldCell.swift */,
|
||||
2ACDC0961D172B2A009B72D6 /* PaddingTextFieldCell.swift */,
|
||||
2A158C1B2945A6B1000A4EC1 /* HeadingMenuItem.swift */,
|
||||
2A3E61BE27C3795B00C6E5B6 /* OptionalMenu.swift */,
|
||||
2A39F15626F74C2500B52876 /* AccessibleStepper.swift */,
|
||||
);
|
||||
name = Views;
|
||||
sourceTree = "<group>";
|
||||
@ -1980,6 +1973,7 @@
|
||||
2A91C3231D1C5840007CF8BE /* Other Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2A2792911D1DACC400F3FC5D /* ThemeViewController.swift */,
|
||||
2A63FBE21D1D90E70081C84E /* ThemeEditorView.swift */,
|
||||
2A2792971D1E57DA00F3FC5D /* SyntaxListViewController.swift */,
|
||||
2A5DCE881D18FFDB00D5D74C /* EncodingListView.swift */,
|
||||
@ -2058,6 +2052,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2ACDA2932B81E8B300B2EBA8 /* GeneralSettings.xcstrings */,
|
||||
2ACDA2A72B81EE0E00B2EBA8 /* AppearanceSettings.xcstrings */,
|
||||
2ACDA2962B81E8B700B2EBA8 /* EditSettings.xcstrings */,
|
||||
2ACDA2992B81E8BB00B2EBA8 /* WindowSettings.xcstrings */,
|
||||
2ACDA29C2B81E8BF00B2EBA8 /* SnippetsSettings.xcstrings */,
|
||||
@ -2218,6 +2213,7 @@
|
||||
2AF601CB296F925200F6F1E8 /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2ACDC0991D172CDE009B72D6 /* AntialiasingText.swift */,
|
||||
2A0A602A27ABD74500725B70 /* FilterField.swift */,
|
||||
2A73B9322A8F6620002F3A16 /* RegexTextField.swift */,
|
||||
2A26156D2977B87F008C2240 /* StepperNumberField.swift */,
|
||||
@ -2494,6 +2490,7 @@
|
||||
2A6F0D801B5500E100C2D03C /* Localizable.strings in Resources */,
|
||||
2A5E6FC42A723CEA00E33EA7 /* InfoPlist.xcstrings in Resources */,
|
||||
2ACDA2912B81E8B300B2EBA8 /* GeneralSettings.xcstrings in Resources */,
|
||||
2ACDA2A52B81EE0E00B2EBA8 /* AppearanceSettings.xcstrings in Resources */,
|
||||
2ACDA2972B81E8BB00B2EBA8 /* WindowSettings.xcstrings in Resources */,
|
||||
2ACDA2942B81E8B700B2EBA8 /* EditSettings.xcstrings in Resources */,
|
||||
2AB9E4C02B830902004E5BDC /* FormatSettings.xcstrings in Resources */,
|
||||
@ -2514,7 +2511,6 @@
|
||||
2A73A87C2B76158600E64C44 /* AddRemoveButton.xcstrings in Resources */,
|
||||
2AA2E0141BFE12620087BDD6 /* UnicodeBlock.strings in Resources */,
|
||||
2A836F811D572A5D0044E8EC /* Main.storyboard in Resources */,
|
||||
2ACDE28D2406B9C000FC31EC /* AppearancePane.storyboard in Resources */,
|
||||
2ACDE29A2406B9C000FC31EC /* FindPanelFieldView.storyboard in Resources */,
|
||||
2ACDE29C2406B9C000FC31EC /* SyntaxListView.storyboard in Resources */,
|
||||
2ACDE2A22406B9C000FC31EC /* KeyBindingTreeView.storyboard in Resources */,
|
||||
@ -2524,6 +2520,7 @@
|
||||
2A7F4DFF2871F46D0029CE66 /* PrintPanelAccessory.storyboard in Resources */,
|
||||
2ACDE2992406B9C000FC31EC /* SnippetsPane.storyboard in Resources */,
|
||||
2ACDE2952406B9C000FC31EC /* StatusBar.storyboard in Resources */,
|
||||
2ACDE28D2406B9C000FC31EC /* ThemeView.storyboard in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -2556,6 +2553,7 @@
|
||||
259C2318077678DE00BA61C5 /* Localizable.strings in Resources */,
|
||||
2A5E6FC52A723CEA00E33EA7 /* InfoPlist.xcstrings in Resources */,
|
||||
2ACDA2922B81E8B300B2EBA8 /* GeneralSettings.xcstrings in Resources */,
|
||||
2ACDA2A62B81EE0E00B2EBA8 /* AppearanceSettings.xcstrings in Resources */,
|
||||
2ACDA2952B81E8B700B2EBA8 /* EditSettings.xcstrings in Resources */,
|
||||
2ACDA2982B81E8BB00B2EBA8 /* WindowSettings.xcstrings in Resources */,
|
||||
2AB9E4C12B830902004E5BDC /* FormatSettings.xcstrings in Resources */,
|
||||
@ -2577,7 +2575,6 @@
|
||||
2A36E36F2AF9ED0B00A73534 /* Sparkle.xcstrings in Resources */,
|
||||
2AA2E0131BFE12620087BDD6 /* UnicodeBlock.strings in Resources */,
|
||||
2A836F801D572A5D0044E8EC /* Main.storyboard in Resources */,
|
||||
2A10D1281E714D230027192A /* AppearancePane.storyboard in Resources */,
|
||||
2A5D13421D1FE34F00D38E6A /* FindPanelFieldView.storyboard in Resources */,
|
||||
2A10D1381E715E5B0027192A /* SyntaxListView.storyboard in Resources */,
|
||||
2A10D10A1E708CDF0027192A /* KeyBindingTreeView.storyboard in Resources */,
|
||||
@ -2587,6 +2584,7 @@
|
||||
2A7F4E002871F46D0029CE66 /* PrintPanelAccessory.storyboard in Resources */,
|
||||
2ADF3C011E6D7345009125BB /* SnippetsPane.storyboard in Resources */,
|
||||
2A6602D01D05BD72003E8D87 /* StatusBar.storyboard in Resources */,
|
||||
2A10D1281E714D230027192A /* ThemeView.storyboard in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -2692,14 +2690,13 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2A39F15726F74C2500B52876 /* AccessibleStepper.swift in Sources */,
|
||||
2A5E410B2B0B559300D5EA20 /* ActionCommand.swift in Sources */,
|
||||
2ADB04AC2A89F14D00C4F562 /* AddRemoveButton.swift in Sources */,
|
||||
2AF29EC42882EE7700DF31D2 /* AdvancedCharacterCounter.swift in Sources */,
|
||||
2A04E9C327FEFA86008C82D8 /* AdvancedCharacterCounterView.swift in Sources */,
|
||||
2ACDC09B1D172CDE009B72D6 /* AntialiasingTextField.swift in Sources */,
|
||||
2ACDC09B1D172CDE009B72D6 /* AntialiasingText.swift in Sources */,
|
||||
2AC2462F1D1BC70C00E46CFA /* AppDelegate.swift in Sources */,
|
||||
2A2792931D1DACC400F3FC5D /* AppearancePaneController.swift in Sources */,
|
||||
2A65EC2A2B80C168008096C5 /* AppearanceSettingsView.swift in Sources */,
|
||||
2AA14CFD1FA4983500EAF586 /* AppleScript.swift in Sources */,
|
||||
2A8918E3294C33C900A23347 /* AppStorage+DefaultKey.swift in Sources */,
|
||||
2AA056AD26FCA171000E0CB2 /* Arithmetics.swift in Sources */,
|
||||
@ -2709,7 +2706,6 @@
|
||||
2A1ABC9B27F056E60054795D /* BidiScrollView.swift in Sources */,
|
||||
2A231A291E7BD82700C2A909 /* Binding.swift in Sources */,
|
||||
2AFECF5B2171C0E60065A7DE /* Bundle+AppInfo.swift in Sources */,
|
||||
2A479C831D8C15A600EEEFC2 /* CenteringTextFieldCell.swift in Sources */,
|
||||
2AB1BD24287DA73D00C6FEAF /* CharacterCountOptionsSheetView.swift in Sources */,
|
||||
2AB1BD1C287D60DF00C6FEAF /* CharacterCountOptionsView.swift in Sources */,
|
||||
2A5DCE501D185F1B00D5D74C /* CharacterField.swift in Sources */,
|
||||
@ -2885,7 +2881,6 @@
|
||||
2A05081423D6B9E900602F5E /* NSViewController.swift in Sources */,
|
||||
2A359DFF1DAE93EE00FEF7AA /* NSWindow+Responder.swift in Sources */,
|
||||
2AD8D74B2064AD83000BEFDB /* NumberTextField.swift in Sources */,
|
||||
2AC3845420C929950003F213 /* OpacitySampleView.swift in Sources */,
|
||||
2ACDA2502B81201A00B2EBA8 /* OpacitySlider.swift in Sources */,
|
||||
2A158C222945F54B000A4EC1 /* OpacityView.swift in Sources */,
|
||||
2AC6069C20416ADE00F9C839 /* OpenPanelAccessory.swift in Sources */,
|
||||
@ -2977,6 +2972,7 @@
|
||||
2ACF23AE26302A4C002B5E10 /* Theme+Syntax.swift in Sources */,
|
||||
2A63FBE41D1D90E70081C84E /* ThemeEditorView.swift in Sources */,
|
||||
2A9082F31D32A9B500228F50 /* ThemeManager.swift in Sources */,
|
||||
2A2792931D1DACC400F3FC5D /* ThemeViewController.swift in Sources */,
|
||||
2A0DD6371E655FE6001CAAA3 /* Tokenizer.swift in Sources */,
|
||||
2A0DD6341E655C4A001CAAA3 /* TokenTextView.swift in Sources */,
|
||||
2AB2913E245AAD74004CC203 /* Unicode.GeneralCategory.swift in Sources */,
|
||||
@ -3056,14 +3052,13 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2A39F15826F74C2500B52876 /* AccessibleStepper.swift in Sources */,
|
||||
2A5E410C2B0B559400D5EA20 /* ActionCommand.swift in Sources */,
|
||||
2ADB04AD2A89F14D00C4F562 /* AddRemoveButton.swift in Sources */,
|
||||
2AF29EC52882EE7700DF31D2 /* AdvancedCharacterCounter.swift in Sources */,
|
||||
2A04E9C427FEFA87008C82D8 /* AdvancedCharacterCounterView.swift in Sources */,
|
||||
2ACDC09A1D172CDE009B72D6 /* AntialiasingTextField.swift in Sources */,
|
||||
2ACDC09A1D172CDE009B72D6 /* AntialiasingText.swift in Sources */,
|
||||
2AC2462E1D1BC70C00E46CFA /* AppDelegate.swift in Sources */,
|
||||
2A2792921D1DACC400F3FC5D /* AppearancePaneController.swift in Sources */,
|
||||
2A65EC2B2B80C168008096C5 /* AppearanceSettingsView.swift in Sources */,
|
||||
2AA14CFC1FA4983500EAF586 /* AppleScript.swift in Sources */,
|
||||
2A8918E4294C33C900A23347 /* AppStorage+DefaultKey.swift in Sources */,
|
||||
2AA056AE26FCA171000E0CB2 /* Arithmetics.swift in Sources */,
|
||||
@ -3073,7 +3068,6 @@
|
||||
2A1ABC9C27F056E60054795D /* BidiScrollView.swift in Sources */,
|
||||
2A231A281E7BD82700C2A909 /* Binding.swift in Sources */,
|
||||
2AFECF5A2171C0E60065A7DE /* Bundle+AppInfo.swift in Sources */,
|
||||
2A479C821D8C15A600EEEFC2 /* CenteringTextFieldCell.swift in Sources */,
|
||||
2AB1BD25287DA73D00C6FEAF /* CharacterCountOptionsSheetView.swift in Sources */,
|
||||
2AB1BD1D287D60DF00C6FEAF /* CharacterCountOptionsView.swift in Sources */,
|
||||
2A5DCE4F1D185F1B00D5D74C /* CharacterField.swift in Sources */,
|
||||
@ -3249,7 +3243,6 @@
|
||||
2A05081323D6B9E900602F5E /* NSViewController.swift in Sources */,
|
||||
2A359DFE1DAE93EE00FEF7AA /* NSWindow+Responder.swift in Sources */,
|
||||
2AD8D74A2064AD83000BEFDB /* NumberTextField.swift in Sources */,
|
||||
2AC3845320C929950003F213 /* OpacitySampleView.swift in Sources */,
|
||||
2A158C232945F54B000A4EC1 /* OpacityView.swift in Sources */,
|
||||
2ACDA2512B81201A00B2EBA8 /* OpacitySlider.swift in Sources */,
|
||||
2AC6069B20416ADE00F9C839 /* OpenPanelAccessory.swift in Sources */,
|
||||
@ -3341,6 +3334,7 @@
|
||||
2ACF23AF26302A4C002B5E10 /* Theme+Syntax.swift in Sources */,
|
||||
2A63FBE31D1D90E70081C84E /* ThemeEditorView.swift in Sources */,
|
||||
2A9082F21D32A9B500228F50 /* ThemeManager.swift in Sources */,
|
||||
2A2792921D1DACC400F3FC5D /* ThemeViewController.swift in Sources */,
|
||||
2A0DD6361E655FE6001CAAA3 /* Tokenizer.swift in Sources */,
|
||||
2A0DD6331E655C4A001CAAA3 /* TokenTextView.swift in Sources */,
|
||||
2AB2913F245AAD74004CC203 /* Unicode.GeneralCategory.swift in Sources */,
|
||||
@ -3421,13 +3415,13 @@
|
||||
name = KeyBindingTreeView.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2A10D1261E714D230027192A /* AppearancePane.storyboard */ = {
|
||||
2A10D1261E714D230027192A /* ThemeView.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
2A10D1271E714D230027192A /* Base */,
|
||||
2AF1229E2B7A3D50004BA1FF /* mul */,
|
||||
);
|
||||
name = AppearancePane.storyboard;
|
||||
name = ThemeView.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2A10D1361E715E5B0027192A /* SyntaxListView.storyboard */ = {
|
||||
|
@ -1,697 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="WBM-EY-ENr">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Appearance Pane Controller-->
|
||||
<scene sceneID="oau-eS-BHv">
|
||||
<objects>
|
||||
<viewController id="WBM-EY-ENr" customClass="AppearancePaneController" customModule="CotEditor" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" horizontalHuggingPriority="750" verticalCompressionResistancePriority="250" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="LgU-un-VaX">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="567"/>
|
||||
<subviews>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="ADB-Wp-iDy">
|
||||
<rect key="frame" x="53" y="348" width="495" height="218"/>
|
||||
<subviews>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="icl-ar-8yG">
|
||||
<rect key="frame" x="18" y="153" width="114" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" alignment="right" title="Standard font:" usesSingleLineMode="YES" id="Z85-S9-uID">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="wT1-jD-6aC" customClass="AntialiasingTextField" customModule="CotEditor" customModuleProvider="target">
|
||||
<rect key="frame" x="138" y="150" width="260" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" priority="750" constant="260" id="Ssa-FC-qrT"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" title="FONT NAME 12" drawsBackground="YES" id="toV-fU-j7j" customClass="CenteringTextFieldCell" customModule="CotEditor" customModuleProvider="target">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<accessibilityConnection property="title" destination="icl-ar-8yG" id="JXg-bX-b1p"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uMj-Iu-oCy">
|
||||
<rect key="frame" x="399" y="144" width="83" height="32"/>
|
||||
<buttonCell key="cell" type="push" title="Select…" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="3289">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="64" id="T74-lW-Yta"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<accessibilityConnection property="title" destination="icl-ar-8yG" id="Rpq-MG-HTP"/>
|
||||
<action selector="showFonts:" target="WBM-EY-ENr" id="80p-Ig-zIc"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="I9r-vj-2gy">
|
||||
<rect key="frame" x="137" y="131" width="66" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Antialias" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="3290">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<accessibilityConnection property="title" destination="icl-ar-8yG" id="akE-EA-zGb"/>
|
||||
<binding destination="IE5-39-jAY" name="value" keyPath="values.shouldAntialias" id="WYd-vz-gCE"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4cD-mR-vJc">
|
||||
<rect key="frame" x="210" y="131" width="70" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Ligatures" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="g3S-3v-6ZA">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<accessibilityConnection property="title" destination="icl-ar-8yG" id="yEn-NR-Avf"/>
|
||||
<binding destination="IE5-39-jAY" name="value" keyPath="values.ligature" id="BcZ-Pb-BN1"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="hws-J2-FDl">
|
||||
<rect key="frame" x="57" y="59" width="75" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" alignment="right" title="Line height:" usesSingleLineMode="YES" id="r1c-v3-qW1">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5XW-Ju-Ix5" customClass="NumberTextField" customModule="CotEditor" customModuleProvider="target">
|
||||
<rect key="frame" x="138" y="56" width="40" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="40" id="yke-nV-fMx"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" usesSingleLineMode="YES" id="IyJ-IR-fVa">
|
||||
<numberFormatter key="formatter" formatterBehavior="custom10_4" numberStyle="decimal" usesGroupingSeparator="NO" minimumIntegerDigits="1" maximumIntegerDigits="2" minimumFractionDigits="1" maximumFractionDigits="2" id="d5U-8W-wLX">
|
||||
<real key="minimum" value="0.10000000000000001"/>
|
||||
<real key="maximum" value="10"/>
|
||||
</numberFormatter>
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<allowedInputSourceLocales>
|
||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||
</allowedInputSourceLocales>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<accessibilityConnection property="title" destination="hws-J2-FDl" id="vTW-pg-qhb"/>
|
||||
<binding destination="IE5-39-jAY" name="value" keyPath="values.lineHeight" id="XEu-TQ-rfy"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XWT-pS-k8a" customClass="AccessibleStepper" customModule="CotEditor" customModuleProvider="target">
|
||||
<rect key="frame" x="179" y="53" width="19" height="28"/>
|
||||
<stepperCell key="cell" continuous="YES" alignment="left" increment="0.10000000000000001" minValue="0.10000000000000001" maxValue="10" doubleValue="1" id="Mkv-St-JNh"/>
|
||||
<connections>
|
||||
<accessibilityConnection property="title" destination="hws-J2-FDl" id="Ikk-4Y-EgE"/>
|
||||
<binding destination="IE5-39-jAY" name="value" keyPath="values.lineHeight" id="cFx-Lt-8aa"/>
|
||||
</connections>
|
||||
</stepper>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xDf-ra-dem">
|
||||
<rect key="frame" x="199" y="59" width="38" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" title="times" usesSingleLineMode="YES" id="VLD-jj-zzl">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="rE0-DL-xRG">
|
||||
<rect key="frame" x="51" y="31" width="81" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Appearance:" usesSingleLineMode="YES" id="6KG-3a-ZuU">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Tqw-t1-w9R">
|
||||
<rect key="frame" x="134" y="30" width="113" height="18"/>
|
||||
<buttonCell key="cell" type="radio" title="Match System" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="apQ-au-gOC">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="updateAppearanceSetting:" target="WBM-EY-ENr" id="SBy-6F-JQC"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button tag="1" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2y3-Ti-pue">
|
||||
<rect key="frame" x="253" y="30" width="57" height="18"/>
|
||||
<buttonCell key="cell" type="radio" title="Light" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="FwU-oj-kwc">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="updateAppearanceSetting:" target="WBM-EY-ENr" id="fZ0-3N-n5O"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button tag="2" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sbW-46-DFB">
|
||||
<rect key="frame" x="316" y="30" width="55" height="18"/>
|
||||
<buttonCell key="cell" type="radio" title="Dark" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="1Cg-21-kjr">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="updateAppearanceSetting:" target="WBM-EY-ENr" id="zU1-hk-Efg"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="C0e-PH-i1L">
|
||||
<rect key="frame" x="137" y="84" width="66" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Antialias" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="3fg-x6-5T8">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="IE5-39-jAY" name="value" keyPath="values.monospacedShouldAntialias" id="lV5-l4-aj0"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Fcc-rL-m1T" customClass="AntialiasingTextField" customModule="CotEditor" customModuleProvider="target">
|
||||
<rect key="frame" x="138" y="103" width="260" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" priority="750" constant="260" id="1NH-gY-fav"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" borderStyle="bezel" alignment="center" title="FONT NAME 12" drawsBackground="YES" id="Rqy-Su-cwW" customClass="CenteringTextFieldCell" customModule="CotEditor" customModuleProvider="target">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<accessibilityConnection property="title" destination="ZHd-UF-pkx" id="ArR-8M-iXr"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<button identifier="monospacedFontButton" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6lq-jQ-EgE">
|
||||
<rect key="frame" x="399" y="97" width="83" height="32"/>
|
||||
<buttonCell key="cell" type="push" title="Select…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="DSX-09-54K">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="64" id="yLU-1C-Ene"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<accessibilityConnection property="title" destination="ZHd-UF-pkx" id="1O2-NW-Qqj"/>
|
||||
<action selector="showFonts:" target="WBM-EY-ENr" id="uvg-i3-Tuc"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Cfh-8I-pCg">
|
||||
<rect key="frame" x="210" y="84" width="70" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Ligatures" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="AFh-3D-ZB2">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="IE5-39-jAY" name="value" keyPath="values.monospacedLigature" id="FvI-T1-cYd"/>
|
||||
</connections>
|
||||
</button>
|
||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="k1t-Xk-gYs">
|
||||
<rect key="frame" x="135" y="175" width="121" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Automatically" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="XcC-5y-bLG" id="xL0-Za-Olv">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="J7d-86-3ex">
|
||||
<items>
|
||||
<menuItem title="Automatically" state="on" id="XcC-5y-bLG"/>
|
||||
<menuItem isSeparatorItem="YES" id="s03-Bx-g45"/>
|
||||
<menuItem title="Standard" tag="2" id="Vla-IY-EYW"/>
|
||||
<menuItem title="Monospaced" tag="1" id="htL-1g-SvR"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<binding destination="IE5-39-jAY" name="selectedTag" keyPath="values.fontPreference" id="GUe-2d-2Xw"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="PBB-XC-8pV">
|
||||
<rect key="frame" x="23" y="182" width="109" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Prefer font using:" usesSingleLineMode="YES" id="XQO-YW-cqZ">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="HDH-L4-Ss3">
|
||||
<rect key="frame" x="40" y="3" width="92" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" alignment="right" title="Editor opacity:" usesSingleLineMode="YES" id="gSx-LA-TPc">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xjz-30-0d3">
|
||||
<rect key="frame" x="160" y="-6" width="216" height="28"/>
|
||||
<sliderCell key="cell" continuous="YES" alignment="left" minValue="0.20000000000000001" maxValue="1" doubleValue="0.90000000000000002" tickMarkPosition="below" numberOfTickMarks="9" sliderType="linear" id="MUF-gG-fiB">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
</sliderCell>
|
||||
<connections>
|
||||
<accessibilityConnection property="title" destination="HDH-L4-Ss3" id="3W9-PV-QDw"/>
|
||||
<binding destination="IE5-39-jAY" name="value" keyPath="values.windowAlpha" id="dXK-uh-bFg"/>
|
||||
</connections>
|
||||
</slider>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ey0-BL-08J" customClass="NumberTextField" customModule="CotEditor" customModuleProvider="target">
|
||||
<rect key="frame" x="406" y="0.0" width="48" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="48" id="2mO-EW-xD8"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="z0a-bE-CA0">
|
||||
<numberFormatter key="formatter" formatterBehavior="default10_4" numberStyle="percent" lenient="YES" minimumIntegerDigits="1" maximumIntegerDigits="2000000000" id="51u-ho-vNA">
|
||||
<integer key="multiplier" value="100"/>
|
||||
<real key="minimum" value="0.20000000000000001"/>
|
||||
<real key="maximum" value="1"/>
|
||||
</numberFormatter>
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<accessibilityConnection property="title" destination="HDH-L4-Ss3" id="tvd-7G-Wc6"/>
|
||||
<binding destination="IE5-39-jAY" name="value" keyPath="values.windowAlpha" id="Kg9-QS-YCY"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="3IH-by-XSu" customClass="OpacitySampleView" customModule="CotEditor" customModuleProvider="target">
|
||||
<rect key="frame" x="138" y="2" width="16" height="16"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="16" id="9z8-yN-TIQ"/>
|
||||
<constraint firstAttribute="width" secondItem="3IH-by-XSu" secondAttribute="height" multiplier="1:1" id="JZb-yC-aTA"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="opacity">
|
||||
<real key="value" value="0.20000000000000001"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</customView>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="NDr-Yf-V2q" customClass="OpacitySampleView" customModule="CotEditor" customModuleProvider="target">
|
||||
<rect key="frame" x="382" y="2" width="16" height="16"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="NDr-Yf-V2q" secondAttribute="height" multiplier="1:1" id="9Wa-kj-g29"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="opacity">
|
||||
<real key="value" value="1"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</customView>
|
||||
<textField focusRingType="none" horizontalHuggingPriority="751" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZHd-UF-pkx">
|
||||
<rect key="frame" x="18" y="106" width="114" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Monospaced font:" usesSingleLineMode="YES" id="B8d-4v-fox">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="xjz-30-0d3" firstAttribute="leading" secondItem="3IH-by-XSu" secondAttribute="trailing" constant="8" symbolic="YES" id="0Ef-vE-BNj"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="k1t-Xk-gYs" secondAttribute="trailing" constant="20" symbolic="YES" id="1ZS-lg-jcx"/>
|
||||
<constraint firstItem="hws-J2-FDl" firstAttribute="trailing" secondItem="icl-ar-8yG" secondAttribute="trailing" id="3ry-gB-SFR"/>
|
||||
<constraint firstItem="Tqw-t1-w9R" firstAttribute="leading" secondItem="rE0-DL-xRG" secondAttribute="trailing" constant="6" symbolic="YES" id="5TB-3p-oLc"/>
|
||||
<constraint firstItem="6lq-jQ-EgE" firstAttribute="leading" secondItem="Fcc-rL-m1T" secondAttribute="trailing" constant="8" symbolic="YES" id="6L2-Sy-AKH"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="sbW-46-DFB" secondAttribute="trailing" constant="20" symbolic="YES" id="6eb-Fr-d6A"/>
|
||||
<constraint firstItem="xjz-30-0d3" firstAttribute="firstBaseline" secondItem="HDH-L4-Ss3" secondAttribute="firstBaseline" id="7Ic-y0-YvS"/>
|
||||
<constraint firstItem="6lq-jQ-EgE" firstAttribute="centerY" secondItem="Fcc-rL-m1T" secondAttribute="centerY" id="7VU-Np-lNe"/>
|
||||
<constraint firstItem="icl-ar-8yG" firstAttribute="centerY" secondItem="wT1-jD-6aC" secondAttribute="centerY" id="Awy-Lh-dcc"/>
|
||||
<constraint firstItem="wT1-jD-6aC" firstAttribute="top" secondItem="k1t-Xk-gYs" secondAttribute="bottom" constant="8" symbolic="YES" id="BKY-eW-xct"/>
|
||||
<constraint firstItem="PBB-XC-8pV" firstAttribute="trailing" secondItem="icl-ar-8yG" secondAttribute="trailing" id="BUA-Jp-oCg"/>
|
||||
<constraint firstItem="4cD-mR-vJc" firstAttribute="leading" secondItem="I9r-vj-2gy" secondAttribute="trailing" constant="8" symbolic="YES" id="CAF-oR-p9c"/>
|
||||
<constraint firstItem="sbW-46-DFB" firstAttribute="leading" secondItem="2y3-Ti-pue" secondAttribute="trailing" constant="8" symbolic="YES" id="DKp-dB-fTm"/>
|
||||
<constraint firstAttribute="trailing" secondItem="uMj-Iu-oCy" secondAttribute="trailing" priority="750" constant="20" symbolic="YES" id="Ft4-Ab-tZV"/>
|
||||
<constraint firstItem="rE0-DL-xRG" firstAttribute="top" secondItem="hws-J2-FDl" secondAttribute="bottom" constant="12" id="Gaj-zD-fsa"/>
|
||||
<constraint firstItem="Fcc-rL-m1T" firstAttribute="leading" secondItem="ZHd-UF-pkx" secondAttribute="trailing" constant="8" symbolic="YES" id="Gkf-Hl-M3h"/>
|
||||
<constraint firstItem="3IH-by-XSu" firstAttribute="leading" secondItem="HDH-L4-Ss3" secondAttribute="trailing" constant="8" symbolic="YES" id="Hgp-d5-2oj"/>
|
||||
<constraint firstItem="PBB-XC-8pV" firstAttribute="top" secondItem="ADB-Wp-iDy" secondAttribute="top" constant="20" symbolic="YES" id="J77-5T-xI3"/>
|
||||
<constraint firstItem="HDH-L4-Ss3" firstAttribute="top" secondItem="rE0-DL-xRG" secondAttribute="bottom" constant="12" id="JcD-Tv-htn"/>
|
||||
<constraint firstItem="rE0-DL-xRG" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="ADB-Wp-iDy" secondAttribute="leading" constant="20" symbolic="YES" id="K02-Ja-frV"/>
|
||||
<constraint firstItem="Fcc-rL-m1T" firstAttribute="top" secondItem="I9r-vj-2gy" secondAttribute="bottom" constant="8" symbolic="YES" id="Kik-mX-d2N"/>
|
||||
<constraint firstItem="wT1-jD-6aC" firstAttribute="leading" secondItem="icl-ar-8yG" secondAttribute="trailing" constant="8" symbolic="YES" id="KoN-Fl-uJL"/>
|
||||
<constraint firstItem="hws-J2-FDl" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="ADB-Wp-iDy" secondAttribute="leading" constant="20" symbolic="YES" id="Mw5-kn-leS"/>
|
||||
<constraint firstItem="icl-ar-8yG" firstAttribute="leading" secondItem="ADB-Wp-iDy" secondAttribute="leading" priority="750" constant="20" symbolic="YES" id="Nu0-Yn-XtG"/>
|
||||
<constraint firstItem="hws-J2-FDl" firstAttribute="baseline" secondItem="5XW-Ju-Ix5" secondAttribute="baseline" id="Nzy-QY-qI7"/>
|
||||
<constraint firstItem="XWT-pS-k8a" firstAttribute="leading" secondItem="5XW-Ju-Ix5" secondAttribute="trailing" constant="4" id="O59-QP-0a7"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Cfh-8I-pCg" secondAttribute="trailing" constant="20" symbolic="YES" id="P98-Fy-JKM"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="6lq-jQ-EgE" secondAttribute="trailing" constant="20" symbolic="YES" id="PO6-5z-jqA"/>
|
||||
<constraint firstItem="Fcc-rL-m1T" firstAttribute="centerY" secondItem="ZHd-UF-pkx" secondAttribute="centerY" id="RCo-rU-m4T"/>
|
||||
<constraint firstItem="ey0-BL-08J" firstAttribute="baseline" secondItem="HDH-L4-Ss3" secondAttribute="baseline" id="S0a-ur-MUh"/>
|
||||
<constraint firstItem="C0e-PH-i1L" firstAttribute="leading" secondItem="ZHd-UF-pkx" secondAttribute="trailing" constant="8" symbolic="YES" id="V8g-sy-xjE"/>
|
||||
<constraint firstItem="C0e-PH-i1L" firstAttribute="top" secondItem="Fcc-rL-m1T" secondAttribute="bottom" constant="4" id="XLX-B0-BhH"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="I9r-vj-2gy" secondAttribute="trailing" constant="20" symbolic="YES" id="YQF-EN-qdM"/>
|
||||
<constraint firstItem="Tqw-t1-w9R" firstAttribute="firstBaseline" secondItem="rE0-DL-xRG" secondAttribute="firstBaseline" id="YcJ-G1-i8m"/>
|
||||
<constraint firstItem="2y3-Ti-pue" firstAttribute="leading" secondItem="Tqw-t1-w9R" secondAttribute="trailing" constant="8" symbolic="YES" id="Yr6-oY-U95"/>
|
||||
<constraint firstItem="NDr-Yf-V2q" firstAttribute="height" secondItem="3IH-by-XSu" secondAttribute="height" id="a5C-yC-NzS"/>
|
||||
<constraint firstItem="xDf-ra-dem" firstAttribute="baseline" secondItem="hws-J2-FDl" secondAttribute="baseline" id="aGv-1b-NB8"/>
|
||||
<constraint firstItem="rE0-DL-xRG" firstAttribute="trailing" secondItem="icl-ar-8yG" secondAttribute="trailing" id="bcF-aH-RCz"/>
|
||||
<constraint firstItem="NDr-Yf-V2q" firstAttribute="leading" secondItem="xjz-30-0d3" secondAttribute="trailing" constant="8" symbolic="YES" id="d8r-yo-Dkx"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="xDf-ra-dem" secondAttribute="trailing" constant="20" symbolic="YES" id="dQb-HU-As6"/>
|
||||
<constraint firstItem="ZHd-UF-pkx" firstAttribute="trailing" secondItem="icl-ar-8yG" secondAttribute="trailing" id="dsb-lL-rDZ"/>
|
||||
<constraint firstItem="ZHd-UF-pkx" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="ADB-Wp-iDy" secondAttribute="leading" constant="20" symbolic="YES" id="fOs-n2-f0l"/>
|
||||
<constraint firstItem="k1t-Xk-gYs" firstAttribute="firstBaseline" secondItem="PBB-XC-8pV" secondAttribute="firstBaseline" id="fjE-B0-T7M"/>
|
||||
<constraint firstItem="5XW-Ju-Ix5" firstAttribute="leading" secondItem="hws-J2-FDl" secondAttribute="trailing" constant="8" symbolic="YES" id="hAo-EC-eWc"/>
|
||||
<constraint firstItem="sbW-46-DFB" firstAttribute="firstBaseline" secondItem="rE0-DL-xRG" secondAttribute="firstBaseline" id="i7c-59-tbF"/>
|
||||
<constraint firstItem="HDH-L4-Ss3" firstAttribute="trailing" secondItem="icl-ar-8yG" secondAttribute="trailing" id="ioD-gT-aRd"/>
|
||||
<constraint firstItem="NDr-Yf-V2q" firstAttribute="centerY" secondItem="3IH-by-XSu" secondAttribute="centerY" id="jsR-IB-Fs3"/>
|
||||
<constraint firstItem="uMj-Iu-oCy" firstAttribute="centerY" secondItem="wT1-jD-6aC" secondAttribute="centerY" id="kAR-SJ-LpJ"/>
|
||||
<constraint firstItem="5XW-Ju-Ix5" firstAttribute="top" secondItem="C0e-PH-i1L" secondAttribute="bottom" constant="8" symbolic="YES" id="kkn-Bj-lmj"/>
|
||||
<constraint firstItem="PBB-XC-8pV" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="ADB-Wp-iDy" secondAttribute="leading" constant="20" symbolic="YES" id="lue-Wq-su3"/>
|
||||
<constraint firstItem="XWT-pS-k8a" firstAttribute="centerY" secondItem="5XW-Ju-Ix5" secondAttribute="centerY" id="nIK-25-MZX"/>
|
||||
<constraint firstItem="uMj-Iu-oCy" firstAttribute="leading" secondItem="wT1-jD-6aC" secondAttribute="trailing" constant="8" symbolic="YES" id="oIB-6V-zoG"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="ey0-BL-08J" secondAttribute="trailing" constant="20" symbolic="YES" id="osa-dq-HAu"/>
|
||||
<constraint firstItem="I9r-vj-2gy" firstAttribute="leading" secondItem="icl-ar-8yG" secondAttribute="trailing" constant="8" symbolic="YES" id="pWb-lP-gpe"/>
|
||||
<constraint firstAttribute="bottom" secondItem="xjz-30-0d3" secondAttribute="bottom" id="pux-GC-jcy"/>
|
||||
<constraint firstItem="xDf-ra-dem" firstAttribute="leading" secondItem="XWT-pS-k8a" secondAttribute="trailing" constant="6" id="qV9-uL-22L"/>
|
||||
<constraint firstItem="HDH-L4-Ss3" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="ADB-Wp-iDy" secondAttribute="leading" constant="20" symbolic="YES" id="reo-sF-nO1"/>
|
||||
<constraint firstItem="Cfh-8I-pCg" firstAttribute="leading" secondItem="C0e-PH-i1L" secondAttribute="trailing" constant="8" symbolic="YES" id="rms-Hn-Hfj"/>
|
||||
<constraint firstItem="2y3-Ti-pue" firstAttribute="firstBaseline" secondItem="rE0-DL-xRG" secondAttribute="firstBaseline" id="s8V-H4-8Cq"/>
|
||||
<constraint firstItem="I9r-vj-2gy" firstAttribute="top" secondItem="wT1-jD-6aC" secondAttribute="bottom" constant="4" id="sUB-Yu-Aiy"/>
|
||||
<constraint firstItem="Cfh-8I-pCg" firstAttribute="firstBaseline" secondItem="C0e-PH-i1L" secondAttribute="firstBaseline" id="sfd-h0-Ujb"/>
|
||||
<constraint firstItem="k1t-Xk-gYs" firstAttribute="leading" secondItem="PBB-XC-8pV" secondAttribute="trailing" constant="8" symbolic="YES" id="swM-YK-xv3"/>
|
||||
<constraint firstItem="4cD-mR-vJc" firstAttribute="firstBaseline" secondItem="I9r-vj-2gy" secondAttribute="firstBaseline" id="uyq-Ib-2OJ"/>
|
||||
<constraint firstItem="NDr-Yf-V2q" firstAttribute="trailing" secondItem="wT1-jD-6aC" secondAttribute="trailing" id="vhb-1A-XI4"/>
|
||||
<constraint firstItem="xjz-30-0d3" firstAttribute="centerY" secondItem="3IH-by-XSu" secondAttribute="centerY" id="x9O-rT-kr6"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="4cD-mR-vJc" secondAttribute="trailing" constant="20" symbolic="YES" id="yDG-8O-FQS"/>
|
||||
<constraint firstItem="ey0-BL-08J" firstAttribute="leading" secondItem="NDr-Yf-V2q" secondAttribute="trailing" constant="8" symbolic="YES" id="zgt-8r-RVi"/>
|
||||
</constraints>
|
||||
</customView>
|
||||
<box horizontalHuggingPriority="750" horizontalCompressionResistancePriority="250" boxType="custom" borderType="line" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="B3l-Yn-4KT">
|
||||
<rect key="frame" x="20" y="52" width="181" height="280"/>
|
||||
<view key="contentView" id="Btf-Bu-KOk">
|
||||
<rect key="frame" x="1" y="1" width="179" height="278"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<scrollView verticalCompressionResistancePriority="250" borderType="none" autohidesScrollers="YES" horizontalLineScroll="20" horizontalPageScroll="10" verticalLineScroll="20" verticalPageScroll="10" translatesAutoresizingMaskIntoConstraints="NO" id="QiH-I6-BXd">
|
||||
<rect key="frame" x="0.0" y="25" width="179" height="254"/>
|
||||
<clipView key="contentView" drawsBackground="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lhq-HG-y2I">
|
||||
<rect key="frame" x="0.0" y="0.0" width="179" height="254"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" tableStyle="fullWidth" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" rowHeight="16" rowSizeStyle="automatic" headerView="3yq-Qd-FKt" viewBased="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8ed-Dt-hO9">
|
||||
<rect key="frame" x="0.0" y="0.0" width="179" height="226"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="4"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn identifier="themeName" width="167" minWidth="40" maxWidth="1000" id="Avf-y8-wXG">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Theme">
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" id="dK4-Cd-J4F">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="IKs-Gh-g0j">
|
||||
<rect key="frame" x="1" y="2" width="176" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" id="jVT-ne-6NT">
|
||||
<rect key="frame" x="0.0" y="0.0" width="176" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" title="THEME NAME" id="sRo-2c-Ydn">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<connections>
|
||||
<outlet property="menu" destination="M4k-Ev-Myg" id="zWN-Yl-PDh"/>
|
||||
</connections>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="IKs-Gh-g0j" name="value" keyPath="objectValue" id="P0s-5L-KQc"/>
|
||||
<outlet property="delegate" destination="WBM-EY-ENr" id="IXD-nD-kYW"/>
|
||||
<outlet property="menu" destination="M4k-Ev-Myg" id="fHh-J8-IRy"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="jVT-ne-6NT" id="A0T-8c-Wdk"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="WBM-EY-ENr" id="a9G-bE-Siw"/>
|
||||
<outlet property="delegate" destination="WBM-EY-ENr" id="rQa-wZ-hU0"/>
|
||||
<outlet property="menu" destination="M4k-Ev-Myg" id="61W-DK-Mqy"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<nil key="backgroundColor"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="FrY-ys-Wya">
|
||||
<rect key="frame" x="0.0" y="238" width="179" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="Czd-4t-kEc">
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<tableHeaderView key="headerView" wantsLayer="YES" id="3yq-Qd-FKt">
|
||||
<rect key="frame" x="0.0" y="0.0" width="179" height="28"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableHeaderView>
|
||||
</scrollView>
|
||||
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="dse-xO-np5">
|
||||
<rect key="frame" x="4" y="22" width="171" height="5"/>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ka6-Bf-yVl">
|
||||
<rect key="frame" x="2" y="-0.5" width="24.5" height="27"/>
|
||||
<buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSAddTemplate" imagePosition="overlaps" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="5JO-2k-t8K">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="23" id="U6N-28-bzY"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="24" id="tOH-dt-pv7"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="addTheme:" target="WBM-EY-ENr" id="jUp-f8-fQO"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FYd-hb-j4K">
|
||||
<rect key="frame" x="25" y="4" width="24.5" height="18"/>
|
||||
<buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="Srn-QD-aiu">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="deleteTheme:" target="WBM-EY-ENr" id="7QN-od-mTI"/>
|
||||
<binding destination="WBM-EY-ENr" name="enabled" keyPath="bundled" id="Cc5-WI-n1S">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
<popUpButton translatesAutoresizingMaskIntoConstraints="NO" id="IcH-In-axb">
|
||||
<rect key="frame" x="136" y="1" width="41" height="23"/>
|
||||
<popUpButtonCell key="cell" type="smallSquare" bezelStyle="smallSquare" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" pullsDown="YES" id="LkE-Zl-odd">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="HHh-e3-GD4">
|
||||
<items>
|
||||
<menuItem state="on" image="NSActionTemplate" hidden="YES" id="4m4-1Z-aml"/>
|
||||
<menuItem title="Rename" id="8h0-Xi-AHB">
|
||||
<connections>
|
||||
<action selector="renameTheme:" target="WBM-EY-ENr" id="sco-hn-q1t"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Duplicate" id="5Eu-k1-cjE">
|
||||
<connections>
|
||||
<action selector="duplicateTheme:" target="WBM-EY-ENr" id="l5d-Ec-SIg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Restore" id="kFt-8v-8ZZ">
|
||||
<connections>
|
||||
<action selector="restoreTheme:" target="WBM-EY-ENr" id="BOc-Ck-jVs"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Export…" id="4B4-mq-8Fs">
|
||||
<connections>
|
||||
<action selector="exportTheme:" target="WBM-EY-ENr" id="TXi-66-Pnk"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Share…" id="w4F-0P-Rgk">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="shareTheme:" target="WBM-EY-ENr" id="q7F-W6-i6I"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Reveal in Finder" alternate="YES" id="Qmf-WU-xe8">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES"/>
|
||||
<connections>
|
||||
<action selector="revealThemeInFinder:" target="WBM-EY-ENr" id="deU-Ap-uFR"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="cpZ-mc-g3N"/>
|
||||
<menuItem title="Import…" id="gcs-B8-kPL">
|
||||
<connections>
|
||||
<action selector="importTheme:" target="WBM-EY-ENr" id="hXl-4t-O2Y"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Reload All Themes" alternate="YES" id="7Yp-bg-3l6">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES"/>
|
||||
<connections>
|
||||
<action selector="reloadAllThemes:" target="WBM-EY-ENr" id="MEI-6f-bnd"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="36" id="pud-N8-x0h"/>
|
||||
</constraints>
|
||||
</popUpButton>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="dse-xO-np5" firstAttribute="leading" secondItem="Btf-Bu-KOk" secondAttribute="leading" constant="4" id="32b-ZM-PQT"/>
|
||||
<constraint firstItem="QiH-I6-BXd" firstAttribute="top" secondItem="Btf-Bu-KOk" secondAttribute="top" constant="-1" id="3Jt-zQ-YwB"/>
|
||||
<constraint firstAttribute="trailing" secondItem="IcH-In-axb" secondAttribute="trailing" constant="2" id="4s6-Jx-1sL"/>
|
||||
<constraint firstAttribute="trailing" secondItem="QiH-I6-BXd" secondAttribute="trailing" id="6Xd-3d-Kg9"/>
|
||||
<constraint firstItem="IcH-In-axb" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="FYd-hb-j4K" secondAttribute="trailing" constant="8" symbolic="YES" id="8Pt-XM-JZ1"/>
|
||||
<constraint firstItem="FYd-hb-j4K" firstAttribute="width" secondItem="Ka6-Bf-yVl" secondAttribute="width" id="9mu-Mk-KCj"/>
|
||||
<constraint firstItem="Ka6-Bf-yVl" firstAttribute="leading" secondItem="Btf-Bu-KOk" secondAttribute="leading" constant="2" id="AUl-Dn-Cca"/>
|
||||
<constraint firstItem="IcH-In-axb" firstAttribute="height" secondItem="Ka6-Bf-yVl" secondAttribute="height" id="CTS-qE-Tlv"/>
|
||||
<constraint firstItem="IcH-In-axb" firstAttribute="top" secondItem="dse-xO-np5" secondAttribute="bottom" id="G8l-37-0if"/>
|
||||
<constraint firstItem="FYd-hb-j4K" firstAttribute="height" secondItem="Ka6-Bf-yVl" secondAttribute="height" id="Hgh-SU-hi4"/>
|
||||
<constraint firstAttribute="bottom" secondItem="IcH-In-axb" secondAttribute="bottom" constant="1" id="dt7-mr-jPC"/>
|
||||
<constraint firstItem="dse-xO-np5" firstAttribute="top" secondItem="QiH-I6-BXd" secondAttribute="bottom" id="fLt-Ed-YUP"/>
|
||||
<constraint firstAttribute="trailing" secondItem="dse-xO-np5" secondAttribute="trailing" constant="4" id="skw-3j-8lI"/>
|
||||
<constraint firstItem="FYd-hb-j4K" firstAttribute="leading" secondItem="Ka6-Bf-yVl" secondAttribute="trailing" constant="-1" id="tl4-wy-5ZZ"/>
|
||||
<constraint firstItem="QiH-I6-BXd" firstAttribute="leading" secondItem="Btf-Bu-KOk" secondAttribute="leading" id="uFh-bw-Q0a"/>
|
||||
<constraint firstItem="IcH-In-axb" firstAttribute="centerY" secondItem="Ka6-Bf-yVl" secondAttribute="centerY" id="wv5-yu-oGs"/>
|
||||
<constraint firstItem="FYd-hb-j4K" firstAttribute="centerY" secondItem="Ka6-Bf-yVl" secondAttribute="centerY" id="yCe-mu-DgM"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="280" id="XFu-Q3-aaP"/>
|
||||
</constraints>
|
||||
<color key="borderColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="fillColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</box>
|
||||
<box autoresizesSubviews="NO" boxType="custom" borderType="line" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="nMR-L3-OOw">
|
||||
<rect key="frame" x="200" y="52" width="380" height="280"/>
|
||||
<view key="contentView" id="XwV-Se-xeY">
|
||||
<rect key="frame" x="1" y="1" width="378" height="278"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
</view>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="380" id="iLy-T8-AkH"/>
|
||||
</constraints>
|
||||
<color key="borderColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="fillColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</box>
|
||||
<button identifier="settings_appearance" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="19L-5s-cbB">
|
||||
<rect key="frame" x="557" y="16" width="25" height="25"/>
|
||||
<buttonCell key="cell" type="help" bezelStyle="helpButton" alignment="center" borderStyle="border" inset="2" id="sFb-B9-3cy">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="openHelpAnchor:" target="6Aq-a8-hQi" id="697-lX-F36"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="ADB-Wp-iDy" firstAttribute="top" secondItem="LgU-un-VaX" secondAttribute="top" id="2Xy-Cw-V3x"/>
|
||||
<constraint firstItem="nMR-L3-OOw" firstAttribute="leading" secondItem="B3l-Yn-4KT" secondAttribute="trailing" constant="-1" id="9hT-rL-Jha"/>
|
||||
<constraint firstAttribute="trailing" secondItem="19L-5s-cbB" secondAttribute="trailing" constant="20" symbolic="YES" id="Djj-Q7-GeI"/>
|
||||
<constraint firstItem="ADB-Wp-iDy" firstAttribute="centerX" secondItem="LgU-un-VaX" secondAttribute="centerX" id="FDv-bS-dUT"/>
|
||||
<constraint firstItem="B3l-Yn-4KT" firstAttribute="top" secondItem="ADB-Wp-iDy" secondAttribute="bottom" constant="16" symbolic="YES" id="Gdd-8F-gWW"/>
|
||||
<constraint firstItem="nMR-L3-OOw" firstAttribute="height" secondItem="B3l-Yn-4KT" secondAttribute="height" id="M2x-H1-dgQ"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="ADB-Wp-iDy" secondAttribute="trailing" id="Oha-cg-3l5"/>
|
||||
<constraint firstItem="B3l-Yn-4KT" firstAttribute="leading" secondItem="LgU-un-VaX" secondAttribute="leading" constant="20" symbolic="YES" id="PUD-QZ-e8E"/>
|
||||
<constraint firstItem="ADB-Wp-iDy" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="LgU-un-VaX" secondAttribute="leading" id="Qj1-TF-ecN"/>
|
||||
<constraint firstAttribute="bottom" secondItem="19L-5s-cbB" secondAttribute="bottom" constant="20" symbolic="YES" id="Zxo-90-BLg"/>
|
||||
<constraint firstItem="19L-5s-cbB" firstAttribute="top" secondItem="nMR-L3-OOw" secondAttribute="bottom" constant="12" symbolic="YES" id="b5i-CQ-iba"/>
|
||||
<constraint firstItem="19L-5s-cbB" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="LgU-un-VaX" secondAttribute="leading" constant="20" symbolic="YES" id="rQc-wR-agD"/>
|
||||
<constraint firstAttribute="trailing" secondItem="nMR-L3-OOw" secondAttribute="trailing" constant="20" symbolic="YES" id="rRQ-U3-JYv"/>
|
||||
<constraint firstItem="nMR-L3-OOw" firstAttribute="top" secondItem="B3l-Yn-4KT" secondAttribute="top" id="xDe-wv-TJf"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="darkAppearanceButton" destination="sbW-46-DFB" id="4e1-Vl-q7O"/>
|
||||
<outlet property="defaultAppearanceButton" destination="Tqw-t1-w9R" id="ybc-Zx-N1i"/>
|
||||
<outlet property="editorOpacityField" destination="ey0-BL-08J" id="yVs-S7-vws"/>
|
||||
<outlet property="fontField" destination="wT1-jD-6aC" id="bP0-VX-1Yp"/>
|
||||
<outlet property="lightAppearanceButton" destination="2y3-Ti-pue" id="IX9-V1-jjs"/>
|
||||
<outlet property="lineHeightField" destination="5XW-Ju-Ix5" id="hEH-sP-bVE"/>
|
||||
<outlet property="monospacedFontField" destination="Fcc-rL-m1T" id="rGb-bO-Rcl"/>
|
||||
<outlet property="themeTableActionButton" destination="IcH-In-axb" id="C7J-hZ-38T"/>
|
||||
<outlet property="themeTableMenu" destination="M4k-Ev-Myg" id="fHl-oM-EJc"/>
|
||||
<outlet property="themeTableView" destination="8ed-Dt-hO9" id="00r-aw-jk5"/>
|
||||
<outlet property="themeViewContainer" destination="nMR-L3-OOw" id="6zc-c1-iFP"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<customObject id="6Aq-a8-hQi" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||
<menu id="M4k-Ev-Myg" userLabel="Theme Table Menu">
|
||||
<items>
|
||||
<menuItem title="New Theme" id="sJb-7g-2FN">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="addTheme:" target="WBM-EY-ENr" id="KTG-fY-DA7"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Duplicate" id="9LW-xw-HBP">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="duplicateTheme:" target="WBM-EY-ENr" id="F3J-BN-cRO"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Restore" id="vTP-Fc-iBF">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="restoreTheme:" target="WBM-EY-ENr" id="ZUB-ys-apg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Rename" id="nWy-OL-CGi">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="renameTheme:" target="WBM-EY-ENr" id="f9E-2Q-JFg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Delete" id="WNG-Ai-RdG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="deleteTheme:" target="WBM-EY-ENr" id="nAN-Hv-S4c"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Export…" id="ueG-D7-DSV">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="exportTheme:" target="WBM-EY-ENr" id="Ioz-ZQ-bfh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Share…" id="pTV-O2-2db">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="shareTheme:" target="WBM-EY-ENr" id="Ijb-ce-jZ5"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Reveal in Finder" alternate="YES" id="UMs-gY-YHE">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES"/>
|
||||
<connections>
|
||||
<action selector="revealThemeInFinder:" target="WBM-EY-ENr" id="a7f-62-vFK"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Import…" id="52n-xG-4ZL">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="importTheme:" target="WBM-EY-ENr" id="prC-cV-bH1"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
<userDefaultsController representsSharedInstance="YES" id="IE5-39-jAY" userLabel="Shared User Defaults Controller"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="0.0" y="0.0"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="NSActionTemplate" width="20" height="20"/>
|
||||
<image name="NSAddTemplate" width="18" height="17"/>
|
||||
<image name="NSRemoveTemplate" width="18" height="5"/>
|
||||
</resources>
|
||||
</document>
|
315
CotEditor/Base.lproj/ThemeView.storyboard
Normal file
315
CotEditor/Base.lproj/ThemeView.storyboard
Normal file
@ -0,0 +1,315 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="WBM-EY-ENr">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Theme View Controller-->
|
||||
<scene sceneID="oau-eS-BHv">
|
||||
<objects>
|
||||
<viewController id="WBM-EY-ENr" customClass="ThemeViewController" customModule="CotEditor" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" horizontalHuggingPriority="750" verticalCompressionResistancePriority="250" id="LgU-un-VaX">
|
||||
<rect key="frame" x="0.0" y="0.0" width="560" height="280"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<box horizontalHuggingPriority="750" horizontalCompressionResistancePriority="250" boxType="custom" borderType="line" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="B3l-Yn-4KT">
|
||||
<rect key="frame" x="0.0" y="0.0" width="181" height="280"/>
|
||||
<view key="contentView" id="Btf-Bu-KOk">
|
||||
<rect key="frame" x="1" y="1" width="179" height="278"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<scrollView verticalCompressionResistancePriority="250" borderType="none" autohidesScrollers="YES" horizontalLineScroll="20" horizontalPageScroll="10" verticalLineScroll="20" verticalPageScroll="10" translatesAutoresizingMaskIntoConstraints="NO" id="QiH-I6-BXd">
|
||||
<rect key="frame" x="0.0" y="25" width="179" height="254"/>
|
||||
<clipView key="contentView" drawsBackground="NO" id="lhq-HG-y2I">
|
||||
<rect key="frame" x="0.0" y="0.0" width="179" height="254"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" tableStyle="fullWidth" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" rowHeight="16" rowSizeStyle="automatic" headerView="3yq-Qd-FKt" viewBased="YES" id="8ed-Dt-hO9">
|
||||
<rect key="frame" x="0.0" y="0.0" width="179" height="226"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="4"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn identifier="themeName" width="167" minWidth="40" maxWidth="1000" id="Avf-y8-wXG">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Theme">
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" id="dK4-Cd-J4F">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="IKs-Gh-g0j">
|
||||
<rect key="frame" x="1" y="2" width="176" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" id="jVT-ne-6NT">
|
||||
<rect key="frame" x="0.0" y="0.0" width="176" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" title="THEME NAME" id="sRo-2c-Ydn">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<connections>
|
||||
<outlet property="menu" destination="M4k-Ev-Myg" id="zWN-Yl-PDh"/>
|
||||
</connections>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="IKs-Gh-g0j" name="value" keyPath="objectValue" id="P0s-5L-KQc"/>
|
||||
<outlet property="delegate" destination="WBM-EY-ENr" id="IXD-nD-kYW"/>
|
||||
<outlet property="menu" destination="M4k-Ev-Myg" id="fHh-J8-IRy"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="jVT-ne-6NT" id="A0T-8c-Wdk"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="WBM-EY-ENr" id="a9G-bE-Siw"/>
|
||||
<outlet property="delegate" destination="WBM-EY-ENr" id="rQa-wZ-hU0"/>
|
||||
<outlet property="menu" destination="M4k-Ev-Myg" id="61W-DK-Mqy"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<nil key="backgroundColor"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="FrY-ys-Wya">
|
||||
<rect key="frame" x="0.0" y="238" width="179" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="Czd-4t-kEc">
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<tableHeaderView key="headerView" wantsLayer="YES" id="3yq-Qd-FKt">
|
||||
<rect key="frame" x="0.0" y="0.0" width="179" height="28"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableHeaderView>
|
||||
</scrollView>
|
||||
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="dse-xO-np5">
|
||||
<rect key="frame" x="4" y="22" width="171" height="5"/>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ka6-Bf-yVl">
|
||||
<rect key="frame" x="2" y="-0.5" width="24.5" height="27"/>
|
||||
<buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSAddTemplate" imagePosition="overlaps" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="5JO-2k-t8K">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="23" id="U6N-28-bzY"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="24" id="tOH-dt-pv7"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="addTheme:" target="WBM-EY-ENr" id="jUp-f8-fQO"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FYd-hb-j4K">
|
||||
<rect key="frame" x="25" y="4" width="24.5" height="18"/>
|
||||
<buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="Srn-QD-aiu">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="deleteTheme:" target="WBM-EY-ENr" id="7QN-od-mTI"/>
|
||||
<binding destination="WBM-EY-ENr" name="enabled" keyPath="bundled" id="Cc5-WI-n1S">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
<popUpButton translatesAutoresizingMaskIntoConstraints="NO" id="IcH-In-axb">
|
||||
<rect key="frame" x="136" y="1" width="41" height="23"/>
|
||||
<popUpButtonCell key="cell" type="smallSquare" bezelStyle="smallSquare" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" pullsDown="YES" id="LkE-Zl-odd">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="HHh-e3-GD4">
|
||||
<items>
|
||||
<menuItem state="on" image="NSActionTemplate" hidden="YES" id="4m4-1Z-aml"/>
|
||||
<menuItem title="Rename" id="8h0-Xi-AHB">
|
||||
<connections>
|
||||
<action selector="renameTheme:" target="WBM-EY-ENr" id="sco-hn-q1t"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Duplicate" id="5Eu-k1-cjE">
|
||||
<connections>
|
||||
<action selector="duplicateTheme:" target="WBM-EY-ENr" id="l5d-Ec-SIg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Restore" id="kFt-8v-8ZZ">
|
||||
<connections>
|
||||
<action selector="restoreTheme:" target="WBM-EY-ENr" id="BOc-Ck-jVs"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Export…" id="4B4-mq-8Fs">
|
||||
<connections>
|
||||
<action selector="exportTheme:" target="WBM-EY-ENr" id="TXi-66-Pnk"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Share…" id="w4F-0P-Rgk">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="shareTheme:" target="WBM-EY-ENr" id="q7F-W6-i6I"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Reveal in Finder" alternate="YES" id="Qmf-WU-xe8">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES"/>
|
||||
<connections>
|
||||
<action selector="revealThemeInFinder:" target="WBM-EY-ENr" id="deU-Ap-uFR"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="cpZ-mc-g3N"/>
|
||||
<menuItem title="Import…" id="gcs-B8-kPL">
|
||||
<connections>
|
||||
<action selector="importTheme:" target="WBM-EY-ENr" id="hXl-4t-O2Y"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Reload All Themes" alternate="YES" id="7Yp-bg-3l6">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES"/>
|
||||
<connections>
|
||||
<action selector="reloadAllThemes:" target="WBM-EY-ENr" id="MEI-6f-bnd"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="36" id="pud-N8-x0h"/>
|
||||
</constraints>
|
||||
</popUpButton>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="dse-xO-np5" firstAttribute="leading" secondItem="Btf-Bu-KOk" secondAttribute="leading" constant="4" id="32b-ZM-PQT"/>
|
||||
<constraint firstItem="QiH-I6-BXd" firstAttribute="top" secondItem="Btf-Bu-KOk" secondAttribute="top" constant="-1" id="3Jt-zQ-YwB"/>
|
||||
<constraint firstAttribute="trailing" secondItem="IcH-In-axb" secondAttribute="trailing" constant="2" id="4s6-Jx-1sL"/>
|
||||
<constraint firstAttribute="trailing" secondItem="QiH-I6-BXd" secondAttribute="trailing" id="6Xd-3d-Kg9"/>
|
||||
<constraint firstItem="IcH-In-axb" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="FYd-hb-j4K" secondAttribute="trailing" constant="8" symbolic="YES" id="8Pt-XM-JZ1"/>
|
||||
<constraint firstItem="FYd-hb-j4K" firstAttribute="width" secondItem="Ka6-Bf-yVl" secondAttribute="width" id="9mu-Mk-KCj"/>
|
||||
<constraint firstItem="Ka6-Bf-yVl" firstAttribute="leading" secondItem="Btf-Bu-KOk" secondAttribute="leading" constant="2" id="AUl-Dn-Cca"/>
|
||||
<constraint firstItem="IcH-In-axb" firstAttribute="height" secondItem="Ka6-Bf-yVl" secondAttribute="height" id="CTS-qE-Tlv"/>
|
||||
<constraint firstItem="IcH-In-axb" firstAttribute="top" secondItem="dse-xO-np5" secondAttribute="bottom" id="G8l-37-0if"/>
|
||||
<constraint firstItem="FYd-hb-j4K" firstAttribute="height" secondItem="Ka6-Bf-yVl" secondAttribute="height" id="Hgh-SU-hi4"/>
|
||||
<constraint firstAttribute="bottom" secondItem="IcH-In-axb" secondAttribute="bottom" constant="1" id="dt7-mr-jPC"/>
|
||||
<constraint firstItem="dse-xO-np5" firstAttribute="top" secondItem="QiH-I6-BXd" secondAttribute="bottom" id="fLt-Ed-YUP"/>
|
||||
<constraint firstAttribute="trailing" secondItem="dse-xO-np5" secondAttribute="trailing" constant="4" id="skw-3j-8lI"/>
|
||||
<constraint firstItem="FYd-hb-j4K" firstAttribute="leading" secondItem="Ka6-Bf-yVl" secondAttribute="trailing" constant="-1" id="tl4-wy-5ZZ"/>
|
||||
<constraint firstItem="QiH-I6-BXd" firstAttribute="leading" secondItem="Btf-Bu-KOk" secondAttribute="leading" id="uFh-bw-Q0a"/>
|
||||
<constraint firstItem="IcH-In-axb" firstAttribute="centerY" secondItem="Ka6-Bf-yVl" secondAttribute="centerY" id="wv5-yu-oGs"/>
|
||||
<constraint firstItem="FYd-hb-j4K" firstAttribute="centerY" secondItem="Ka6-Bf-yVl" secondAttribute="centerY" id="yCe-mu-DgM"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="280" id="XFu-Q3-aaP"/>
|
||||
</constraints>
|
||||
<color key="borderColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="fillColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</box>
|
||||
<box autoresizesSubviews="NO" boxType="custom" borderType="line" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="nMR-L3-OOw">
|
||||
<rect key="frame" x="180" y="0.0" width="380" height="280"/>
|
||||
<view key="contentView" id="XwV-Se-xeY">
|
||||
<rect key="frame" x="1" y="1" width="378" height="278"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
</view>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="380" id="iLy-T8-AkH"/>
|
||||
</constraints>
|
||||
<color key="borderColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="fillColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</box>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="B3l-Yn-4KT" firstAttribute="top" secondItem="LgU-un-VaX" secondAttribute="top" id="9QZ-cq-2Rc"/>
|
||||
<constraint firstItem="nMR-L3-OOw" firstAttribute="leading" secondItem="B3l-Yn-4KT" secondAttribute="trailing" constant="-1" id="9hT-rL-Jha"/>
|
||||
<constraint firstAttribute="bottom" secondItem="B3l-Yn-4KT" secondAttribute="bottom" id="CkI-pa-qX7"/>
|
||||
<constraint firstItem="nMR-L3-OOw" firstAttribute="height" secondItem="B3l-Yn-4KT" secondAttribute="height" id="M2x-H1-dgQ"/>
|
||||
<constraint firstItem="B3l-Yn-4KT" firstAttribute="leading" secondItem="LgU-un-VaX" secondAttribute="leading" id="PUD-QZ-e8E"/>
|
||||
<constraint firstAttribute="trailing" secondItem="nMR-L3-OOw" secondAttribute="trailing" id="rRQ-U3-JYv"/>
|
||||
<constraint firstItem="nMR-L3-OOw" firstAttribute="top" secondItem="B3l-Yn-4KT" secondAttribute="top" id="xDe-wv-TJf"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="actionButton" destination="IcH-In-axb" id="hVw-gM-yuO"/>
|
||||
<outlet property="contextMenu" destination="M4k-Ev-Myg" id="DY0-cx-TNb"/>
|
||||
<outlet property="tableView" destination="8ed-Dt-hO9" id="DOi-ce-8mk"/>
|
||||
<outlet property="themeViewContainer" destination="nMR-L3-OOw" id="6zc-c1-iFP"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<customObject id="6Aq-a8-hQi" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||
<menu id="M4k-Ev-Myg" userLabel="Theme Table Menu">
|
||||
<items>
|
||||
<menuItem title="New Theme" id="sJb-7g-2FN">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="addTheme:" target="WBM-EY-ENr" id="KTG-fY-DA7"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Duplicate" id="9LW-xw-HBP">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="duplicateTheme:" target="WBM-EY-ENr" id="F3J-BN-cRO"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Restore" id="vTP-Fc-iBF">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="restoreTheme:" target="WBM-EY-ENr" id="ZUB-ys-apg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Rename" id="nWy-OL-CGi">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="renameTheme:" target="WBM-EY-ENr" id="f9E-2Q-JFg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Delete" id="WNG-Ai-RdG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="deleteTheme:" target="WBM-EY-ENr" id="nAN-Hv-S4c"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Export…" id="ueG-D7-DSV">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="exportTheme:" target="WBM-EY-ENr" id="Ioz-ZQ-bfh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Share…" id="pTV-O2-2db">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="shareTheme:" target="WBM-EY-ENr" id="Ijb-ce-jZ5"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Reveal in Finder" alternate="YES" id="UMs-gY-YHE">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES"/>
|
||||
<connections>
|
||||
<action selector="revealThemeInFinder:" target="WBM-EY-ENr" id="a7f-62-vFK"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Import…" id="52n-xG-4ZL">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="importTheme:" target="WBM-EY-ENr" id="prC-cV-bH1"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
<userDefaultsController representsSharedInstance="YES" id="IE5-39-jAY" userLabel="Shared User Defaults Controller"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="0.0" y="0.0"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="NSActionTemplate" width="20" height="20"/>
|
||||
<image name="NSAddTemplate" width="18" height="17"/>
|
||||
<image name="NSRemoveTemplate" width="18" height="5"/>
|
||||
</resources>
|
||||
</document>
|
@ -1,36 +0,0 @@
|
||||
//
|
||||
// AccessibleStepper.swift
|
||||
//
|
||||
// CotEditor
|
||||
// https://coteditor.com
|
||||
//
|
||||
// Created by 1024jp on 2021-09-19.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// © 2021 1024jp
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import AppKit
|
||||
|
||||
final class AccessibleStepper: NSStepper {
|
||||
|
||||
override func accessibilityValue() -> Any? {
|
||||
|
||||
// workaround the issue that the value is read in percent in VoiceOver
|
||||
// (macOS 11, 2021)
|
||||
self.stringValue
|
||||
}
|
||||
}
|
156
CotEditor/Sources/AntialiasingText.swift
Normal file
156
CotEditor/Sources/AntialiasingText.swift
Normal file
@ -0,0 +1,156 @@
|
||||
//
|
||||
// AntialiasingTextField.swift
|
||||
//
|
||||
// CotEditor
|
||||
// https://coteditor.com
|
||||
//
|
||||
// Created by 1024jp on 2016-05-08.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// © 2016-2024 1024jp
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import AppKit
|
||||
|
||||
struct AntialiasingText: NSViewRepresentable {
|
||||
|
||||
typealias NSViewType = NSTextField
|
||||
|
||||
|
||||
private var text: String
|
||||
private var antialiasDisabled: Bool = false
|
||||
private var font: NSFont?
|
||||
|
||||
|
||||
init(_ text: String) {
|
||||
|
||||
self.text = text
|
||||
}
|
||||
|
||||
|
||||
func makeNSView(context: Context) -> NSTextField {
|
||||
|
||||
let nsView = AntialiasingTextField(string: self.text)
|
||||
nsView.isEditable = false
|
||||
nsView.isSelectable = false
|
||||
nsView.frame.size.height = 22
|
||||
nsView.alignment = .center
|
||||
|
||||
// keep initial field height
|
||||
nsView.heightAnchor.constraint(equalToConstant: nsView.frame.height).isActive = true
|
||||
|
||||
return nsView
|
||||
}
|
||||
|
||||
|
||||
func updateNSView(_ nsView: NSTextField, context: Context) {
|
||||
|
||||
nsView.stringValue = self.text
|
||||
nsView.font = self.font
|
||||
(nsView as! AntialiasingTextField).antialiasDisabled = self.antialiasDisabled
|
||||
}
|
||||
|
||||
|
||||
/// Sets whether disables the antialias.
|
||||
///
|
||||
/// - Parameter disabled: The antialias state to change.
|
||||
func antialiasDisabled(_ disabled: Bool = true) -> Self {
|
||||
|
||||
var view = self
|
||||
view.antialiasDisabled = disabled
|
||||
return view
|
||||
}
|
||||
|
||||
|
||||
/// Sets the font to display.
|
||||
///
|
||||
/// - Parameter font: The font.
|
||||
func font(nsFont font: NSFont?) -> Self {
|
||||
|
||||
var view = self
|
||||
view.font = font
|
||||
return view
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private final class AntialiasingTextField: NSTextField {
|
||||
|
||||
@Invalidating(.display) var antialiasDisabled = false
|
||||
|
||||
|
||||
override class var cellClass: AnyClass? {
|
||||
|
||||
get { CenteringTextFieldCell.self }
|
||||
set { _ = newValue }
|
||||
}
|
||||
|
||||
|
||||
/// Controls antialiasing of text.
|
||||
override func draw(_ dirtyRect: NSRect) {
|
||||
|
||||
if self.antialiasDisabled {
|
||||
NSGraphicsContext.saveGraphicsState()
|
||||
NSGraphicsContext.current?.shouldAntialias = false
|
||||
}
|
||||
|
||||
super.draw(dirtyRect)
|
||||
|
||||
if self.antialiasDisabled {
|
||||
NSGraphicsContext.restoreGraphicsState()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private final class CenteringTextFieldCell: NSTextFieldCell {
|
||||
|
||||
/// Returns the rect of content text.
|
||||
override func titleRect(forBounds rect: NSRect) -> NSRect {
|
||||
|
||||
var titleRect = super.titleRect(forBounds: rect)
|
||||
let titleSize = self.attributedStringValue.size()
|
||||
|
||||
titleRect.origin.y = (rect.minY + (rect.height - titleSize.height) / 2).rounded(.down)
|
||||
titleRect.size.height = rect.height - titleRect.origin.y
|
||||
|
||||
return titleRect
|
||||
}
|
||||
|
||||
|
||||
/// Draws inside of the field.
|
||||
override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {
|
||||
|
||||
self.attributedStringValue.draw(in: self.titleRect(forBounds: cellFrame))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// MARK: - Preview
|
||||
|
||||
@available(macOS 14, *)
|
||||
#Preview(traits: .fixedLayout(width: 200, height: 400)) {
|
||||
VStack {
|
||||
AntialiasingText("Antialias Text")
|
||||
.antialiasDisabled(true)
|
||||
|
||||
AntialiasingText("Smooth Text")
|
||||
.antialiasDisabled(false)
|
||||
.font(nsFont: NSFont.monospacedSystemFont(ofSize: 8, weight: .regular))
|
||||
}.padding()
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
//
|
||||
// AntialiasingTextField.swift
|
||||
//
|
||||
// CotEditor
|
||||
// https://coteditor.com
|
||||
//
|
||||
// Created by 1024jp on 2016-05-08.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// © 2016-2022 1024jp
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import AppKit
|
||||
|
||||
final class AntialiasingTextField: NSTextField {
|
||||
|
||||
// MARK: Public Properties
|
||||
|
||||
@Invalidating(.display) var disablesAntialiasing = false
|
||||
|
||||
|
||||
|
||||
// MARK: Text Field Methods
|
||||
|
||||
/// Controls antialiasing of text.
|
||||
override func draw(_ dirtyRect: NSRect) {
|
||||
|
||||
if self.disablesAntialiasing {
|
||||
NSGraphicsContext.saveGraphicsState()
|
||||
NSGraphicsContext.current?.shouldAntialias = false
|
||||
}
|
||||
|
||||
super.draw(dirtyRect)
|
||||
|
||||
if self.disablesAntialiasing {
|
||||
NSGraphicsContext.restoreGraphicsState()
|
||||
}
|
||||
}
|
||||
}
|
@ -89,4 +89,10 @@ extension AppStorage {
|
||||
|
||||
self.init(wrappedValue: defaultValue, key.rawValue, store: store)
|
||||
}
|
||||
|
||||
|
||||
init(_ key: DefaultKey<Value>, store: UserDefaults? = nil) where Value == Data? {
|
||||
|
||||
self.init(key.rawValue, store: store)
|
||||
}
|
||||
}
|
||||
|
272
CotEditor/Sources/AppearanceSettingsView.swift
Normal file
272
CotEditor/Sources/AppearanceSettingsView.swift
Normal file
@ -0,0 +1,272 @@
|
||||
//
|
||||
// AppearanceSettingsView.swift
|
||||
//
|
||||
// CotEditor
|
||||
// https://coteditor.com
|
||||
//
|
||||
// Created by 1024jp on 2014-04-18.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// © 2014-2024 1024jp
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct AppearanceSettingsView: View {
|
||||
|
||||
@AppStorage(.fontPreference) private var fontPreference
|
||||
@AppStorage(.font) private var font
|
||||
@AppStorage(.shouldAntialias) private var shouldAntialias
|
||||
@AppStorage(.ligature) private var ligature
|
||||
@AppStorage(.monospacedFont) private var monospacedFont
|
||||
@AppStorage(.monospacedShouldAntialias) private var monospacedShouldAntialias
|
||||
@AppStorage(.monospacedLigature) private var monospacedLigature
|
||||
|
||||
@AppStorage(.lineHeight) private var lineHeight
|
||||
@AppStorage(.documentAppearance) private var documentAppearance
|
||||
@AppStorage(.windowAlpha) private var windowAlpha
|
||||
|
||||
@State private var selectingFont: Data?
|
||||
@State private var isMonospacedFontAlertPresented = false
|
||||
|
||||
|
||||
var body: some View {
|
||||
|
||||
Grid(alignment: .leadingFirstTextBaseline, verticalSpacing: 8) {
|
||||
GridRow {
|
||||
Text("Prefer font using:", tableName: "AppearanceSettings")
|
||||
.gridColumnAlignment(.trailing)
|
||||
|
||||
Picker(selection: $fontPreference) {
|
||||
Text(FontPreference.automatic.label).tag(FontPreference.automatic)
|
||||
Divider()
|
||||
Text(FontPreference.standard.label).tag(FontPreference.standard)
|
||||
Text(FontPreference.monospaced.label).tag(FontPreference.monospaced)
|
||||
} label: {
|
||||
EmptyView()
|
||||
}.fixedSize()
|
||||
}
|
||||
|
||||
GridRow {
|
||||
Text("Standard font:", tableName: "AppearanceSettings")
|
||||
.gridColumnAlignment(.trailing)
|
||||
|
||||
FontSettingView(data: $font ?? (try! FontType.standard.systemFont().archivedData), antialias: $shouldAntialias, ligature: $ligature)
|
||||
}
|
||||
|
||||
GridRow {
|
||||
Text("Monospaced font:", tableName: "AppearanceSettings")
|
||||
.gridColumnAlignment(.trailing)
|
||||
|
||||
FontSettingView(data: $monospacedFont ?? (try! FontType.monospaced.systemFont().archivedData), antialias: $monospacedShouldAntialias, ligature: $monospacedLigature)
|
||||
.onChange(of: self.monospacedFont) { [oldData = self.monospacedFont] data in
|
||||
guard
|
||||
let data,
|
||||
let font = NSFont(archivedData: data),
|
||||
!font.isFixedPitch
|
||||
else { return }
|
||||
|
||||
self.selectingFont = oldData
|
||||
self.isMonospacedFontAlertPresented = true
|
||||
}
|
||||
.alert(String(localized: "The selected font doesn’t seem to be monospaced.", table: "AppearanceSettings"), isPresented: $isMonospacedFontAlertPresented, presenting: self.selectingFont) { font in
|
||||
Button("OK") {
|
||||
self.isMonospacedFontAlertPresented = false
|
||||
}
|
||||
Button("Cancel") {
|
||||
self.monospacedFont = font
|
||||
self.isMonospacedFontAlertPresented = false
|
||||
}
|
||||
} message: { _ in
|
||||
Text("Do you want to use it for the monospaced font?", tableName: "AppearanceSettings", comment: "“it” is the selected font.")
|
||||
}
|
||||
}
|
||||
|
||||
GridRow {
|
||||
Text("Line height:", tableName: "AppearanceSettings")
|
||||
.gridColumnAlignment(.trailing)
|
||||
|
||||
HStack(alignment: .firstTextBaseline) {
|
||||
Stepper(value: $lineHeight, in: 0.1...10, step: 0.1, format: .number, label: EmptyView.init)
|
||||
.monospacedDigit()
|
||||
.multilineTextAlignment(.trailing)
|
||||
|
||||
Text("times", tableName: "AppearanceSettings", comment: "unit for line height")
|
||||
}
|
||||
}
|
||||
|
||||
GridRow {
|
||||
Text("Appearance:", tableName: "AppearanceSettings")
|
||||
.gridColumnAlignment(.trailing)
|
||||
|
||||
Picker(selection: $documentAppearance) {
|
||||
ForEach(AppearanceMode.allCases, id: \.self) {
|
||||
Text($0.label)
|
||||
}
|
||||
} label: {
|
||||
EmptyView()
|
||||
}
|
||||
.pickerStyle(.radioGroup)
|
||||
.horizontalRadioGroupLayout()
|
||||
.labelsHidden()
|
||||
}
|
||||
|
||||
GridRow(alignment: .center) {
|
||||
Text("Editor opacity:", tableName: "AppearanceSettings")
|
||||
.gridColumnAlignment(.trailing)
|
||||
|
||||
HStack {
|
||||
OpacitySlider(value: $windowAlpha)
|
||||
.frame(width: 240)
|
||||
|
||||
TextField(value: $windowAlpha, format: .percent.precision(.fractionLength(0)), prompt: Text(1, format: .percent), label: EmptyView.init)
|
||||
.monospacedDigit()
|
||||
.multilineTextAlignment(.trailing)
|
||||
.frame(width: 48)
|
||||
}
|
||||
}
|
||||
|
||||
ThemeView()
|
||||
.padding(.top, 10)
|
||||
|
||||
HStack {
|
||||
Spacer()
|
||||
HelpButton(anchor: "settings_appearance")
|
||||
}
|
||||
}
|
||||
.scenePadding()
|
||||
.frame(minWidth: 600)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private struct FontSettingView: View {
|
||||
|
||||
@Binding var data: Data
|
||||
@Binding var antialias: Bool
|
||||
@Binding var ligature: Bool
|
||||
|
||||
private var font: Binding<NSFont> {
|
||||
|
||||
Binding(get: { NSFont(archivedData: self.data) ?? .init() },
|
||||
set: { self.data = (try? $0.archivedData) ?? self.data })
|
||||
}
|
||||
|
||||
|
||||
var body: some View {
|
||||
|
||||
VStack(alignment: .leading, spacing: 5) {
|
||||
HStack {
|
||||
AntialiasingText(self.displayFontName)
|
||||
.antialiasDisabled(!self.antialias)
|
||||
.font(nsFont: self.font.wrappedValue.withSize(0))
|
||||
.help(self.displayFontName)
|
||||
.frame(maxWidth: 260)
|
||||
.alignmentGuide(.firstTextBaseline) { $0.height }
|
||||
FontPicker(String(localized: "Select…", table: "AppearanceSettings", comment: "label for font picker button"), selection: self.font)
|
||||
}
|
||||
HStack {
|
||||
Toggle(String(localized: "Antialias", table: "AppearanceSettings"), isOn: $antialias)
|
||||
Toggle(String(localized: "Ligatures", table: "AppearanceSettings"), isOn: $ligature)
|
||||
}.controlSize(.small)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Returns the font name and size to display.
|
||||
private var displayFontName: String {
|
||||
|
||||
let font = self.font.wrappedValue
|
||||
|
||||
return "\(font.displayName ?? font.fontName) \(font.pointSize.formatted())"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private struct ThemeView: NSViewControllerRepresentable {
|
||||
|
||||
typealias NSViewControllerType = ThemeViewController
|
||||
|
||||
|
||||
func makeNSViewController(context: Context) -> ThemeViewController {
|
||||
|
||||
NSStoryboard(name: "ThemeView", bundle: nil).instantiateInitialController()!
|
||||
}
|
||||
|
||||
func updateNSViewController(_ nsViewController: ThemeViewController, context: Context) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private extension FontPreference {
|
||||
|
||||
var label: String {
|
||||
|
||||
switch self {
|
||||
case .automatic:
|
||||
String(localized: "FontPreference.automatic.label",
|
||||
defaultValue: "Automatically",
|
||||
table: "AppearanceSettings")
|
||||
case .monospaced:
|
||||
String(localized: "FontPreference.monospaced.label",
|
||||
defaultValue: "Monospaced",
|
||||
table: "AppearanceSettings")
|
||||
case .standard:
|
||||
String(localized: "FontPreference.standard.label",
|
||||
defaultValue: "Standard",
|
||||
table: "AppearanceSettings")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private extension AppearanceMode {
|
||||
|
||||
var label: String {
|
||||
|
||||
switch self {
|
||||
case .default:
|
||||
String(localized: "AppearanceMode.automatic.label",
|
||||
defaultValue: "Match System",
|
||||
table: "AppearanceSettings")
|
||||
case .light:
|
||||
String(localized: "AppearanceMode.light.label",
|
||||
defaultValue: "Light",
|
||||
table: "AppearanceSettings")
|
||||
case .dark:
|
||||
String(localized: "AppearanceMode.dark.label",
|
||||
defaultValue: "Dark",
|
||||
table: "AppearanceSettings")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// MARK: - Preview
|
||||
|
||||
#Preview {
|
||||
AppearanceSettingsView()
|
||||
}
|
||||
|
||||
#Preview("FontSettingView") {
|
||||
@State var antialias = false
|
||||
@State var ligature = false
|
||||
|
||||
return FontSettingView(data: .constant(Data()), antialias: $antialias, ligature: $ligature)
|
||||
.padding()
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
//
|
||||
// CenteringTextFieldCell.swift
|
||||
//
|
||||
// CotEditor
|
||||
// https://coteditor.com
|
||||
//
|
||||
// Created by 1024jp on 2016-09-16.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// © 2016-2021 1024jp
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import AppKit
|
||||
|
||||
final class CenteringTextFieldCell: NSTextFieldCell {
|
||||
|
||||
/// Returns the rect of content text.
|
||||
override func titleRect(forBounds rect: NSRect) -> NSRect {
|
||||
|
||||
var titleRect = super.titleRect(forBounds: rect)
|
||||
let titleSize = self.attributedStringValue.size()
|
||||
|
||||
titleRect.origin.y = (rect.minY + (rect.height - titleSize.height) / 2).rounded(.down)
|
||||
titleRect.size.height = rect.height - titleRect.origin.y
|
||||
|
||||
return titleRect
|
||||
}
|
||||
|
||||
|
||||
/// Draws inside of the field.
|
||||
override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {
|
||||
|
||||
self.attributedStringValue.draw(in: self.titleRect(forBounds: cellFrame))
|
||||
}
|
||||
}
|
@ -48,7 +48,7 @@ enum WritingDirection: Int, CaseIterable {
|
||||
}
|
||||
|
||||
|
||||
enum FontPreference: Int {
|
||||
enum FontPreference: Int, CaseIterable {
|
||||
|
||||
case automatic
|
||||
case monospaced
|
||||
@ -56,7 +56,7 @@ enum FontPreference: Int {
|
||||
}
|
||||
|
||||
|
||||
enum AppearanceMode: Int {
|
||||
enum AppearanceMode: Int, CaseIterable {
|
||||
|
||||
case `default`
|
||||
case light
|
||||
|
@ -1,79 +0,0 @@
|
||||
//
|
||||
// OpacitySampleView.swift
|
||||
//
|
||||
// CotEditor
|
||||
// https://coteditor.com
|
||||
//
|
||||
// Created by 1024jp on 2018-06-07.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// © 2018-2023 1024jp
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import AppKit
|
||||
|
||||
@IBDesignable
|
||||
final class OpacitySampleView: NSView {
|
||||
|
||||
// MARK: Inspectable Properties
|
||||
|
||||
@IBInspectable private var opacity: CGFloat = 0.5
|
||||
|
||||
|
||||
// MARK: Private Properties
|
||||
|
||||
private let cornerRadius: CGFloat = 4
|
||||
private let padding: CGFloat = 3
|
||||
|
||||
|
||||
|
||||
// MARK: View Methods
|
||||
|
||||
override func draw(_ dirtyRect: NSRect) {
|
||||
|
||||
NSGraphicsContext.saveGraphicsState()
|
||||
|
||||
// draw bezel
|
||||
let baseFrame = self.bounds.insetBy(dx: NSBezierPath.defaultLineWidth / 2,
|
||||
dy: NSBezierPath.defaultLineWidth / 2)
|
||||
let basePath = NSBezierPath(roundedRect: baseFrame,
|
||||
xRadius: self.cornerRadius,
|
||||
yRadius: self.cornerRadius)
|
||||
|
||||
NSColor.controlBackgroundColor.setFill()
|
||||
basePath.fill()
|
||||
NSColor.gridColor.setStroke()
|
||||
basePath.stroke()
|
||||
|
||||
// draw triangle
|
||||
let innerFrame = self.bounds.insetBy(dx: self.padding, dy: self.padding)
|
||||
let path = NSBezierPath()
|
||||
path.move(to: innerFrame.origin)
|
||||
path.line(to: NSPoint(x: innerFrame.maxX, y: innerFrame.maxY))
|
||||
path.line(to: NSPoint(x: innerFrame.maxX, y: innerFrame.minY))
|
||||
path.close()
|
||||
|
||||
let innerRadius = max(self.cornerRadius - self.padding, 0)
|
||||
let clip = NSBezierPath(roundedRect: innerFrame, xRadius: innerRadius, yRadius: innerRadius)
|
||||
path.append(clip)
|
||||
path.setClip()
|
||||
|
||||
NSColor.labelColor.withAlphaComponent(1 - self.opacity).setFill()
|
||||
path.fill()
|
||||
|
||||
NSGraphicsContext.restoreGraphicsState()
|
||||
}
|
||||
}
|
@ -64,16 +64,11 @@ final class SettingsWindowController: NSWindowController {
|
||||
|
||||
private extension SettingsPane {
|
||||
|
||||
private enum ViewType {
|
||||
|
||||
case storyboard(NSStoryboard.Name)
|
||||
case swiftUI(any View)
|
||||
}
|
||||
|
||||
|
||||
var tabViewItem: NSTabViewItem {
|
||||
|
||||
let tabViewItem = NSTabViewItem(viewController: self.viewController)
|
||||
let viewController = NSHostingController(rootView: AnyView(self.view))
|
||||
viewController.sizingOptions = .preferredContentSize
|
||||
let tabViewItem = NSTabViewItem(viewController: viewController)
|
||||
tabViewItem.label = self.label
|
||||
tabViewItem.image = NSImage(systemSymbolName: self.symbolName, accessibilityDescription: self.label)
|
||||
tabViewItem.identifier = self.rawValue
|
||||
@ -82,30 +77,16 @@ private extension SettingsPane {
|
||||
}
|
||||
|
||||
|
||||
private var viewController: NSViewController {
|
||||
|
||||
switch self.viewType {
|
||||
case .storyboard(let name):
|
||||
return NSStoryboard(name: name, bundle: nil).instantiateInitialController()!
|
||||
|
||||
case .swiftUI(let view):
|
||||
let controller = NSHostingController(rootView: AnyView(view))
|
||||
controller.sizingOptions = .preferredContentSize
|
||||
return controller
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private var viewType: ViewType {
|
||||
private var view: any View {
|
||||
|
||||
switch self {
|
||||
case .general: .swiftUI(GeneralSettingsView())
|
||||
case .appearance: .storyboard("AppearancePane")
|
||||
case .window: .swiftUI(WindowSettingsView())
|
||||
case .edit: .swiftUI(EditSettingsView())
|
||||
case .format: .swiftUI(FormatSettingsView())
|
||||
case .snippets: .swiftUI(SnippetsSettingsView())
|
||||
case .keyBindings: .swiftUI(KeyBindingsSettingsView())
|
||||
case .general: GeneralSettingsView()
|
||||
case .appearance: AppearanceSettingsView()
|
||||
case .window: WindowSettingsView()
|
||||
case .edit: EditSettingsView()
|
||||
case .format: FormatSettingsView()
|
||||
case .snippets: SnippetsSettingsView()
|
||||
case .keyBindings: KeyBindingsSettingsView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// AppearancePaneController.swift
|
||||
// ThemeViewController.swift
|
||||
//
|
||||
// CotEditor
|
||||
// https://coteditor.com
|
||||
@ -9,7 +9,7 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// © 2004-2007 nakamuxu
|
||||
// © 2014-2023 1024jp
|
||||
// © 2014-2024 1024jp
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
@ -30,30 +30,19 @@ import Combine
|
||||
import SwiftUI
|
||||
import UniformTypeIdentifiers
|
||||
|
||||
final class AppearancePaneController: NSViewController, NSMenuItemValidation, NSTableViewDelegate, NSTableViewDataSource, NSFilePromiseProviderDelegate, NSTextFieldDelegate {
|
||||
final class ThemeViewController: NSViewController, NSMenuItemValidation, NSTableViewDelegate, NSTableViewDataSource, NSFilePromiseProviderDelegate, NSTextFieldDelegate {
|
||||
|
||||
// MARK: Private Properties
|
||||
|
||||
private var fontPanelTarget: FontType = .standard
|
||||
private var themeNames: [String] = []
|
||||
private var settingNames: [String] = []
|
||||
@objc private dynamic var isBundled = false // bound to remove button
|
||||
|
||||
private var fontObservers: Set<AnyCancellable> = []
|
||||
private var themeManagerObservers: Set<AnyCancellable> = []
|
||||
private var observers: Set<AnyCancellable> = []
|
||||
private lazy var filePromiseQueue = OperationQueue()
|
||||
|
||||
@IBOutlet private weak var fontField: AntialiasingTextField?
|
||||
@IBOutlet private weak var monospacedFontField: AntialiasingTextField?
|
||||
@IBOutlet private weak var lineHeightField: NSTextField?
|
||||
@IBOutlet private weak var editorOpacityField: NSTextField?
|
||||
|
||||
@IBOutlet private weak var defaultAppearanceButton: NSButton?
|
||||
@IBOutlet private weak var lightAppearanceButton: NSButton?
|
||||
@IBOutlet private weak var darkAppearanceButton: NSButton?
|
||||
|
||||
@IBOutlet private weak var themeTableView: NSTableView?
|
||||
@IBOutlet private var themeTableActionButton: NSButton?
|
||||
@IBOutlet private var themeTableMenu: NSMenu?
|
||||
@IBOutlet private weak var tableView: NSTableView?
|
||||
@IBOutlet private var actionButton: NSButton?
|
||||
@IBOutlet private var contextMenu: NSMenu?
|
||||
@IBOutlet private var themeViewContainer: NSBox?
|
||||
|
||||
|
||||
@ -66,14 +55,10 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
|
||||
// register drag & drop types
|
||||
let receiverTypes = NSFilePromiseReceiver.readableDraggedTypes.map { NSPasteboard.PasteboardType($0) }
|
||||
self.themeTableView?.registerForDraggedTypes([.fileURL] + receiverTypes)
|
||||
self.themeTableView?.setDraggingSourceOperationMask(.copy, forLocal: false)
|
||||
self.tableView?.registerForDraggedTypes([.fileURL] + receiverTypes)
|
||||
self.tableView?.setDraggingSourceOperationMask(.copy, forLocal: false)
|
||||
|
||||
// set initial value as field's placeholder
|
||||
self.lineHeightField?.bindNullPlaceholderToUserDefaults()
|
||||
self.editorOpacityField?.bindNullPlaceholderToUserDefaults()
|
||||
|
||||
self.themeNames = ThemeManager.shared.settingNames
|
||||
self.settingNames = ThemeManager.shared.settingNames
|
||||
}
|
||||
|
||||
|
||||
@ -81,44 +66,22 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
|
||||
super.viewWillAppear()
|
||||
|
||||
// setup font fields
|
||||
self.fontObservers = [
|
||||
UserDefaults.standard.publisher(for: .font, initial: true)
|
||||
.sink { [weak self] _ in self?.fontField?.displayFontName(for: UserDefaults.standard.font(for: .standard)) },
|
||||
UserDefaults.standard.publisher(for: .shouldAntialias, initial: true)
|
||||
.sink { [weak self] in self?.fontField?.disablesAntialiasing = !$0 },
|
||||
UserDefaults.standard.publisher(for: .monospacedFont, initial: true)
|
||||
.sink { [weak self] _ in self?.monospacedFontField?.displayFontName(for: UserDefaults.standard.font(for: .monospaced)) },
|
||||
UserDefaults.standard.publisher(for: .monospacedShouldAntialias, initial: true)
|
||||
.sink { [weak self] in self?.monospacedFontField?.disablesAntialiasing = !$0 },
|
||||
]
|
||||
|
||||
// select one of appearance radio buttons
|
||||
switch UserDefaults.standard[.documentAppearance] {
|
||||
case .default:
|
||||
self.defaultAppearanceButton?.state = .on
|
||||
case .light:
|
||||
self.lightAppearanceButton?.state = .on
|
||||
case .dark:
|
||||
self.darkAppearanceButton?.state = .on
|
||||
}
|
||||
|
||||
// sync theme list change
|
||||
self.themeManagerObservers = [
|
||||
// sync list change
|
||||
self.observers = [
|
||||
ThemeManager.shared.$settingNames
|
||||
.receive(on: RunLoop.main)
|
||||
.sink { [weak self] _ in self?.updateThemeList() },
|
||||
.sink { [weak self] _ in self?.updateList() },
|
||||
ThemeManager.shared.didUpdateSetting
|
||||
.compactMap(\.new)
|
||||
.receive(on: RunLoop.main)
|
||||
.filter { [weak self] in $0 == self?.selectedThemeName }
|
||||
.filter { [weak self] in $0 == self?.selectedSettingName }
|
||||
.sink { [weak self] name in
|
||||
guard let theme = ThemeManager.shared.setting(name: name) else { return }
|
||||
|
||||
self?.setTheme(theme, name: name)
|
||||
},
|
||||
]
|
||||
self.themeTableView?.scrollToBeginningOfDocument(nil)
|
||||
self.tableView?.scrollToBeginningOfDocument(nil)
|
||||
}
|
||||
|
||||
|
||||
@ -126,15 +89,7 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
|
||||
super.viewDidDisappear()
|
||||
|
||||
// stop observations for UI update
|
||||
self.fontObservers.removeAll()
|
||||
self.themeManagerObservers.removeAll()
|
||||
|
||||
// detach a possible font panel's target set in `showFonts(_:)`
|
||||
if NSFontManager.shared.target === self {
|
||||
NSFontManager.shared.target = nil
|
||||
NSFontPanel.shared.close()
|
||||
}
|
||||
self.observers.removeAll()
|
||||
}
|
||||
|
||||
|
||||
@ -143,7 +98,7 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
|
||||
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
|
||||
|
||||
let isContextMenu = (menuItem.menu == self.themeTableMenu)
|
||||
let isContextMenu = (menuItem.menu == self.contextMenu)
|
||||
|
||||
let settingName = self.representedSettingName(for: menuItem.menu)
|
||||
menuItem.representedObject = settingName
|
||||
@ -213,14 +168,14 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
/// The number of themes.
|
||||
func numberOfRows(in tableView: NSTableView) -> Int {
|
||||
|
||||
self.themeNames.count
|
||||
self.settingNames.count
|
||||
}
|
||||
|
||||
|
||||
/// The content of the table cell.
|
||||
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
|
||||
|
||||
self.themeNames[safe: row]
|
||||
self.settingNames[safe: row]
|
||||
}
|
||||
|
||||
|
||||
@ -277,7 +232,7 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
func tableView(_ tableView: NSTableView, pasteboardWriterForRow row: Int) -> (any NSPasteboardWriting)? {
|
||||
|
||||
let provider = NSFilePromiseProvider(fileType: UTType.cotTheme.identifier, delegate: self)
|
||||
provider.userInfo = self.themeNames[row]
|
||||
provider.userInfo = self.settingNames[row]
|
||||
|
||||
return provider
|
||||
}
|
||||
@ -312,13 +267,11 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
|
||||
// MARK: Delegate
|
||||
|
||||
// NSTableViewDelegate < themeTableView
|
||||
// NSTableViewDelegate < tableView
|
||||
|
||||
func tableViewSelectionDidChange(_ notification: Notification) {
|
||||
|
||||
guard notification.object as? NSTableView == self.themeTableView else { return }
|
||||
|
||||
self.setTheme(name: self.selectedThemeName)
|
||||
self.setTheme(name: self.selectedSettingName)
|
||||
}
|
||||
|
||||
|
||||
@ -326,8 +279,8 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
|
||||
guard let view = rowView.view(atColumn: 0) as? NSTableCellView else { return }
|
||||
|
||||
let themeName = self.themeNames[row]
|
||||
let isBundled = ThemeManager.shared.state(of: themeName)?.isBundled == true
|
||||
let settingName = self.settingNames[row]
|
||||
let isBundled = ThemeManager.shared.state(of: settingName)?.isBundled == true
|
||||
|
||||
view.textField?.isSelectable = false
|
||||
view.textField?.isEditable = !isBundled
|
||||
@ -344,7 +297,7 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
// finish if empty (The original name will be restored automatically)
|
||||
guard !newName.isEmpty else { return true }
|
||||
|
||||
let oldName = self.selectedThemeName
|
||||
let oldName = self.selectedSettingName
|
||||
|
||||
do {
|
||||
try ThemeManager.shared.renameSetting(name: oldName, to: newName)
|
||||
@ -369,18 +322,6 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
|
||||
// MARK: Action Messages
|
||||
|
||||
/// A radio button for `documentAppearance` was clicked.
|
||||
@IBAction func updateAppearanceSetting(_ sender: NSButton) {
|
||||
|
||||
UserDefaults.standard[.documentAppearance] = AppearanceMode(rawValue: sender.tag)!
|
||||
|
||||
let themeName = ThemeManager.shared.userDefaultSettingName
|
||||
let row = self.themeNames.firstIndex(of: themeName) ?? 0
|
||||
|
||||
self.themeTableView?.selectRowIndexes([row], byExtendingSelection: false)
|
||||
}
|
||||
|
||||
|
||||
/// Adds a new theme.
|
||||
@IBAction func addTheme(_ sender: Any?) {
|
||||
|
||||
@ -392,14 +333,14 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
return
|
||||
}
|
||||
|
||||
self.updateThemeList(bySelecting: settingName)
|
||||
self.updateList(bySelecting: settingName)
|
||||
}
|
||||
|
||||
|
||||
/// Duplicates the selected theme.
|
||||
@IBAction func duplicateTheme(_ sender: Any?) {
|
||||
|
||||
let baseName = self.targetThemeName(for: sender)
|
||||
let baseName = self.targetSettingName(for: sender)
|
||||
let settingName: String
|
||||
do {
|
||||
settingName = try ThemeManager.shared.duplicateSetting(name: baseName)
|
||||
@ -408,42 +349,42 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
return
|
||||
}
|
||||
|
||||
self.updateThemeList(bySelecting: settingName)
|
||||
self.updateList(bySelecting: settingName)
|
||||
}
|
||||
|
||||
|
||||
/// Starts renaming a theme.
|
||||
@IBAction func renameTheme(_ sender: Any?) {
|
||||
|
||||
let themeName = self.targetThemeName(for: sender)
|
||||
let row = self.themeNames.firstIndex(of: themeName) ?? 0
|
||||
let settingName = self.targetSettingName(for: sender)
|
||||
let row = self.settingNames.firstIndex(of: settingName) ?? 0
|
||||
|
||||
self.themeTableView?.editColumn(0, row: row, with: nil, select: false)
|
||||
self.tableView?.editColumn(0, row: row, with: nil, select: false)
|
||||
}
|
||||
|
||||
|
||||
/// Deletes the selected theme.
|
||||
@IBAction func deleteTheme(_ sender: Any?) {
|
||||
|
||||
let themeName = self.targetThemeName(for: sender)
|
||||
let settingName = self.targetSettingName(for: sender)
|
||||
|
||||
self.deleteTheme(name: themeName)
|
||||
self.deleteTheme(name: settingName)
|
||||
}
|
||||
|
||||
|
||||
/// Restores the selected theme to original bundled one.
|
||||
@IBAction func restoreTheme(_ sender: Any?) {
|
||||
|
||||
let themeName = self.targetThemeName(for: sender)
|
||||
let settingName = self.targetSettingName(for: sender)
|
||||
|
||||
self.restoreTheme(name: themeName)
|
||||
self.restoreTheme(name: settingName)
|
||||
}
|
||||
|
||||
|
||||
/// Exports the selected theme.
|
||||
@IBAction func exportTheme(_ sender: Any?) {
|
||||
|
||||
let settingName = self.targetThemeName(for: sender)
|
||||
let settingName = self.targetSettingName(for: sender)
|
||||
|
||||
let savePanel = NSSavePanel()
|
||||
savePanel.canCreateDirectories = true
|
||||
@ -488,16 +429,16 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
/// Shares the selected themes.
|
||||
@IBAction func shareTheme(_ sender: NSMenuItem) {
|
||||
|
||||
let themeName = self.targetThemeName(for: sender)
|
||||
let settingName = self.targetSettingName(for: sender)
|
||||
|
||||
guard let url = ThemeManager.shared.urlForUserSetting(name: themeName) else { return }
|
||||
guard let url = ThemeManager.shared.urlForUserSetting(name: settingName) else { return }
|
||||
|
||||
let picker = NSSharingServicePicker(items: [url])
|
||||
|
||||
if let view = self.themeTableView?.clickedRowView { // context menu
|
||||
if let view = self.tableView?.clickedRowView { // context menu
|
||||
picker.show(relativeTo: .zero, of: view, preferredEdge: .minX)
|
||||
|
||||
} else if let view = self.themeTableActionButton { // action menu
|
||||
} else if let view = self.actionButton { // action menu
|
||||
picker.show(relativeTo: .zero, of: view, preferredEdge: .minY)
|
||||
}
|
||||
}
|
||||
@ -506,9 +447,9 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
/// Opens the theme directory in the Application Support directory in the Finder where the selected theme exists.
|
||||
@IBAction func revealThemeInFinder(_ sender: Any?) {
|
||||
|
||||
let themeName = self.targetThemeName(for: sender)
|
||||
let settingName = self.targetSettingName(for: sender)
|
||||
|
||||
guard let url = ThemeManager.shared.urlForUserSetting(name: themeName) else { return }
|
||||
guard let url = ThemeManager.shared.urlForUserSetting(name: settingName) else { return }
|
||||
|
||||
NSWorkspace.shared.activateFileViewerSelecting([url])
|
||||
}
|
||||
@ -527,12 +468,12 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
// MARK: Private Methods
|
||||
|
||||
/// Theme name which is currently selected in the list table.
|
||||
private var selectedThemeName: String {
|
||||
private var selectedSettingName: String {
|
||||
|
||||
guard let tableView = self.themeTableView, tableView.selectedRow >= 0 else {
|
||||
guard let tableView = self.tableView, tableView.selectedRow >= 0 else {
|
||||
return ThemeManager.shared.userDefaultSettingName
|
||||
}
|
||||
return self.themeNames[tableView.selectedRow]
|
||||
return self.settingNames[tableView.selectedRow]
|
||||
}
|
||||
|
||||
|
||||
@ -540,24 +481,24 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
///
|
||||
/// - Parameter sender: The sender to test.
|
||||
/// - Returns: The setting name.
|
||||
private func targetThemeName(for sender: Any?) -> String {
|
||||
private func targetSettingName(for sender: Any?) -> String {
|
||||
|
||||
if let menuItem = sender as? NSMenuItem {
|
||||
return menuItem.representedObject as! String
|
||||
}
|
||||
return self.selectedThemeName
|
||||
return self.selectedSettingName
|
||||
}
|
||||
|
||||
|
||||
private func representedSettingName(for menu: NSMenu?) -> String? {
|
||||
|
||||
guard self.themeTableView?.menu == menu else {
|
||||
return self.selectedThemeName
|
||||
guard self.tableView?.menu == menu else {
|
||||
return self.selectedSettingName
|
||||
}
|
||||
|
||||
guard let clickedRow = self.themeTableView?.clickedRow, clickedRow != -1 else { return nil } // clicked blank area
|
||||
guard let clickedRow = self.tableView?.clickedRow, clickedRow != -1 else { return nil } // clicked blank area
|
||||
|
||||
return self.themeNames[safe: clickedRow]
|
||||
return self.settingNames[safe: clickedRow]
|
||||
}
|
||||
|
||||
|
||||
@ -663,17 +604,17 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
/// Updates the theme table and selects the desired item.
|
||||
///
|
||||
/// - Parameter selectingName: The item name to select.
|
||||
private func updateThemeList(bySelecting selectingName: String? = nil) {
|
||||
private func updateList(bySelecting selectingName: String? = nil) {
|
||||
|
||||
let themeName = selectingName ?? ThemeManager.shared.userDefaultSettingName
|
||||
let settingName = selectingName ?? ThemeManager.shared.userDefaultSettingName
|
||||
|
||||
self.themeNames = ThemeManager.shared.settingNames
|
||||
self.settingNames = ThemeManager.shared.settingNames
|
||||
|
||||
guard let tableView = self.themeTableView else { return }
|
||||
guard let tableView = self.tableView else { return }
|
||||
|
||||
tableView.reloadData()
|
||||
|
||||
let row = self.themeNames.firstIndex(of: themeName) ?? 0
|
||||
let row = self.settingNames.firstIndex(of: settingName) ?? 0
|
||||
|
||||
tableView.selectRowIndexes([row], byExtendingSelection: false)
|
||||
if selectingName != nil {
|
||||
@ -685,90 +626,9 @@ final class AppearancePaneController: NSViewController, NSMenuItemValidation, NS
|
||||
/// Updates the selection of the theme table.
|
||||
private func updateThemeSelection() {
|
||||
|
||||
let themeName = ThemeManager.shared.userDefaultSettingName
|
||||
let row = self.themeNames.firstIndex(of: themeName) ?? 0
|
||||
let settingName = ThemeManager.shared.userDefaultSettingName
|
||||
let row = self.settingNames.firstIndex(of: settingName) ?? 0
|
||||
|
||||
self.themeTableView?.selectRowIndexes([row], byExtendingSelection: false)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// MARK: - Font Setting
|
||||
|
||||
extension NSUserInterfaceItemIdentifier {
|
||||
|
||||
static let monospacedFontButton = Self("monospacedFontButton")
|
||||
}
|
||||
|
||||
|
||||
extension AppearancePaneController: NSFontChanging {
|
||||
|
||||
// MARK: Font Changing Methods
|
||||
|
||||
/// Restricts items to display in the font panel.
|
||||
func validModesForFontPanel(_ fontPanel: NSFontPanel) -> NSFontPanel.ModeMask {
|
||||
|
||||
[.collection, .face, .size]
|
||||
}
|
||||
|
||||
|
||||
/// Returns the font selection in the font panel did update.
|
||||
func changeFont(_ sender: NSFontManager?) {
|
||||
|
||||
guard let sender else { return assertionFailure() }
|
||||
|
||||
let font = sender.convert(.systemFont(ofSize: 0))
|
||||
let target = self.fontPanelTarget
|
||||
|
||||
if target == .monospaced, !font.isFixedPitch {
|
||||
let alert = NSAlert()
|
||||
alert.alertStyle = .warning
|
||||
alert.messageText = String(localized: "The selected font doesn’t seem to be monospaced.")
|
||||
alert.informativeText = String(localized: "Do you want to use it for the monospaced font?", comment: "“it” is the selected font.")
|
||||
alert.addButton(withTitle: String(localized: "OK"))
|
||||
alert.addButton(withTitle: String(localized: "Cancel"))
|
||||
|
||||
guard alert.runModal() == .alertFirstButtonReturn else { return }
|
||||
}
|
||||
|
||||
guard let data = try? font.archivedData else { return }
|
||||
|
||||
UserDefaults.standard[.fontKey(for: target)] = data
|
||||
}
|
||||
|
||||
|
||||
|
||||
// MARK: Action Messages
|
||||
|
||||
/// Shows the font panel.
|
||||
@IBAction func showFonts(_ sender: NSButton) {
|
||||
|
||||
self.fontPanelTarget = (sender.identifier == .monospacedFontButton) ? .monospaced : .standard
|
||||
let font = UserDefaults.standard.font(for: self.fontPanelTarget)
|
||||
|
||||
NSFontManager.shared.setSelectedFont(font, isMultiple: false)
|
||||
NSFontManager.shared.orderFrontFontPanel(sender)
|
||||
NSFontManager.shared.target = self
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private extension NSTextField {
|
||||
|
||||
/// Displays the font name and size in the manner of the given font setting.
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - font: The font to display.
|
||||
func displayFontName(for font: NSFont) {
|
||||
|
||||
let displayName = font.displayName ?? font.fontName
|
||||
let size = font.pointSize
|
||||
let maxDisplaySize = NSFont.systemFontSize(for: self.controlSize)
|
||||
|
||||
self.stringValue = displayName + " " + size.formatted()
|
||||
self.toolTip = self.stringValue
|
||||
self.font = font.withSize(min(size, maxDisplaySize))
|
||||
self.tableView?.selectRowIndexes([row], byExtendingSelection: false)
|
||||
}
|
||||
}
|
@ -549,11 +549,6 @@
|
||||
"Key Bindings" = "Kláv. zkratky";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "Zdá se, že vybrané písmo není neproporcionální.";
|
||||
"Do you want to use it for the monospaced font?" = "Chcete ho použít pro neproporcionální písmo?"; // “it” is the selected font.
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "Přejít na URL";
|
||||
|
||||
|
@ -549,11 +549,6 @@
|
||||
"Key Bindings" = "Kurzbefehle";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "Die ausgewählte Schrift scheint proportional.";
|
||||
"Do you want to use it for the monospaced font?" = "Möchtest du sie für die nichtproportionale Schrift verwenden?"; // “it” is the selected font.
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "URL öffnen";
|
||||
|
||||
|
@ -549,11 +549,6 @@
|
||||
"Key Bindings" = "Key Bindings";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "The selected font doesn’t seem to be monospaced.";
|
||||
"Do you want to use it for the monospaced font?" = "Do you want to use it for the monospaced font?"; // “it” is the selected font.
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "Jump to URL";
|
||||
|
||||
|
@ -549,11 +549,6 @@
|
||||
"Key Bindings" = "Atajos de teclado";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "La fuente seleccionada no parece ser monoespaciada."; // FIXME: needs review
|
||||
"Do you want to use it for the monospaced font?" = "¿Quieres usarlo para la fuente monoespaciada?"; // “it” is the selected font. // FIXME: needs review
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "Saltar a la URL";
|
||||
|
||||
|
@ -549,11 +549,6 @@
|
||||
"Key Bindings" = "Raccourcis";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "La police sélectionnée ne semble pas être monochasse.";
|
||||
"Do you want to use it for the monospaced font?" = "Voulez-vous l'utiliser comme police monochasse ?"; // “it” is the selected font.
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "Ouvrir l’URL";
|
||||
|
||||
|
@ -549,11 +549,6 @@
|
||||
"Key Bindings" = "Abbreviazioni";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "La font selezionata non sembra a spaziatura fissa.";
|
||||
"Do you want to use it for the monospaced font?" = "La vuoi usare come font a spaziatura fissa?"; // “it” is the selected font.
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "Vai all’URL";
|
||||
|
||||
|
@ -550,11 +550,6 @@
|
||||
"Key Bindings" = "キーバインド";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "選択したフォントは等幅フォントではないようです。";
|
||||
"Do you want to use it for the monospaced font?" = "選択したフォントを等幅フォントとして使用しますか?"; // “it” is the selected font.
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "URLにジャンプ";
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
1448
CotEditor/mul.lproj/AppearanceSettings.xcstrings
Normal file
1448
CotEditor/mul.lproj/AppearanceSettings.xcstrings
Normal file
File diff suppressed because it is too large
Load Diff
1488
CotEditor/mul.lproj/ThemeView.xcstrings
Normal file
1488
CotEditor/mul.lproj/ThemeView.xcstrings
Normal file
File diff suppressed because it is too large
Load Diff
@ -549,11 +549,6 @@
|
||||
"Key Bindings" = "Atalhos";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "A fonte selecionada não parace ser monoespaçada.";
|
||||
"Do you want to use it for the monospaced font?" = "Você deseja usar a fonte selecionada como fonte monoespaçada?"; // “it” is the selected font.
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "Visite o URL";
|
||||
|
||||
|
@ -549,11 +549,6 @@
|
||||
"Key Bindings" = "Düğme Bağıntıları";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "Seçili font, sabit genişlikli değil gibi görünüyor";
|
||||
"Do you want to use it for the monospaced font?" = "Sabit genişlikli font olarak kullanmak istiyor musunuz?"; // “it” is the selected font.
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "URL’ye Atla";
|
||||
|
||||
|
@ -550,11 +550,6 @@
|
||||
"Key Bindings" = "按键绑定";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "所选字体似乎不是等宽字体。";
|
||||
"Do you want to use it for the monospaced font?" = "确定将其选定为等宽字体?"; // “it” is the selected font.
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "跳转到URL";
|
||||
|
||||
|
@ -549,11 +549,6 @@
|
||||
"Key Bindings" = "按鍵繫結";
|
||||
|
||||
|
||||
// Appearance pane
|
||||
// alert message
|
||||
"The selected font doesn’t seem to be monospaced." = "當前選中的字體似乎並非等寬字體。";
|
||||
"Do you want to use it for the monospaced font?" = "您真的要將這個字體作為等寬字體來使用嗎?"; // “it” is the selected font.
|
||||
|
||||
// tooltip
|
||||
"Jump to URL" = "跳轉到URL";
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user