Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55aeea5222 | ||
|
|
fc640250d8 | ||
|
|
1071c55eef | ||
|
|
b7df436a5d | ||
|
|
7e68c1752c | ||
|
|
abf6312908 | ||
|
|
f62050cc4a | ||
|
|
8f8897c319 | ||
|
|
e78699ece3 | ||
|
|
90dc754748 |
@@ -1 +1 @@
|
|||||||
github "relikd/RSXML" "8c3ca8bfc34a227588b41f07896a39fdff0f2e58"
|
github "relikd/RSXML" "401f470ab00ab656843162e002e111331b001824"
|
||||||
|
|||||||
97
README.md
97
README.md
@@ -2,74 +2,89 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
For nearly a decade I've been using the then free version of [RSS Menu](https://itunes.apple.com/us/app/rss-menu/id423069534). However, with the release of macOS Mojave, 32bit applications are no longer supported. Furthermore, the currently available version in the Mac App Store was last updated in 2014 (as of writing).
|
For nearly a decade I've been using the then free version of [RSS Menu](https://itunes.apple.com/us/app/rss-menu/id423069534).
|
||||||
|
However, with the release of macOS Mojave, 32bit applications are no longer supported.
|
||||||
|
Furthermore, the currently available version in the Mac App Store was last updated in 2014 (as of writing).
|
||||||
|
|
||||||
*baRSS* was build from scratch with a minimal footprint in mind. It will be available on the AppStore eventually. If you want a feature to be added, drop me an email or create an issue. Look at the other issues, in case somebody else already filed one similar. If you like this project and want to say thank you drop me a line (or other stuff like money). Regardless, I'll continue development as long as I'm using it on my own. Admittedly, I've invested way too much time in this project already (1400h+) …
|
*baRSS* was build from scratch with a minimal footprint in mind. It will be available on the AppStore eventually.
|
||||||
|
If you want a feature to be added, drop me an email or create an issue.
|
||||||
|
Look at the other issues, in case somebody else already filed one similar.
|
||||||
|
If you like this project and want to say thank you drop me a line (or other stuff like money).
|
||||||
|
Regardless, I'll continue development as long as I'm using it on my own.
|
||||||
|
Admittedly, I've invested way too much time in this project already (1400h+) …
|
||||||
|
|
||||||
|
|
||||||
Why is this project not written in Swift?
|
### Why is this project not written in Swift?
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
Actually, I started this project with Swift. Even without adding much functionality, the app was exceeding the 10 Mb file size. Compared to the nearly finished Alpha version with 500 Kb written in Objective-C. The reason for that, Swift frameworks are always packed into the final application. I decided that this level of encapsulation is a waste of space for such a small application.
|
Actually, I started this project with Swift. Even without adding much functionality, the app was exceeding the 10 Mb file size.
|
||||||
|
Compared to the nearly finished Alpha version with 500 Kb written in Objective-C.
|
||||||
|
The reason for that, Swift frameworks are always packed into the final application.
|
||||||
|
I decided that this level of encapsulation is a waste of space for such a small application.
|
||||||
|
|
||||||
|
|
||||||
3rd Party Libraries
|
### 3rd Party Libraries
|
||||||
-------------------
|
|
||||||
|
|
||||||
This project uses a modified version of Brent Simmons [RSXML](https://github.com/brentsimmons/RSXML) for feed parsing. RSXML is licensed under a MIT license (same as this project).
|
This project uses a modified version of Brent Simmons [RSXML](https://github.com/brentsimmons/RSXML) for feed parsing.
|
||||||
|
RSXML is licensed under a MIT license (same as this project).
|
||||||
|
|
||||||
|
|
||||||
Current project state
|
Install
|
||||||
---------------------
|
-------
|
||||||
|
|
||||||
All basic functionality is there. What's missing?
|
Easy way: go to [releases](https://github.com/relikd/baRSS/releases) and downloaded the latest version.
|
||||||
|
|
||||||
- Authenticated feeds
|
### Build from source
|
||||||
- Online sync with other services
|
|
||||||
- Text / UI localisation
|
|
||||||
- App icon & UI icons
|
|
||||||
|
|
||||||
All in all, the software is in a usable state. The remaining features will be added in the coming weeks.
|
You'll need Xcode and [Carthage](https://github.com/Carthage/Carthage#installing-carthage). The latter is optional, you can build the [RSXML](https://github.com/relikd/RSXML) library from source instead. Carthage just makes it more convenient.
|
||||||
|
Download and unzip this project, navigate to the root folder and run `carthage bootstrap --platform macOS`.
|
||||||
|
|
||||||
|
That's it. Open Xcode and build the project. Note, there are some compiler flags that append 'beta' to the development release. If you prefer the optimized release version go to `Product > Archive`.
|
||||||
|
|
||||||
|
|
||||||
Hidden options
|
Hidden options
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
1) When holding down the option key, the menu will show an item to open only a few unread items at a time. This number can be changed with the following Terminal command (default: 10):
|
1) When holding down the option key, the menu will show an item to open only a few unread items at a time.
|
||||||
|
This number can be changed with the following Terminal command (default: 10):
|
||||||
|
|
||||||
defaults write de.relikd.baRSS openFewLinksLimit -int 10
|
```defaults write de.relikd.baRSS openFewLinksLimit -int 10```
|
||||||
|
|
||||||
2) In preferences you can choose to show 'Short article names'. This will limit the number of displayed characters to 60 (default). With this Terminal command you can customize this number:
|
2) In preferences you can choose to show 'Short article names'. This will limit the number of displayed characters to 60 (default).
|
||||||
|
With this Terminal command you can customize this number:
|
||||||
|
|
||||||
|
```defaults write de.relikd.baRSS shortArticleNamesLimit -int 50```
|
||||||
|
|
||||||
|
3) If you hold down the option key and click on an article item, you can mark a single item (un-)read.
|
||||||
|
|
||||||
|
4) Limit number of displayed articles in feed menu.
|
||||||
|
**Note:** unread count for feed and group may be different than the unread items inside (if unread articles are omitted).
|
||||||
|
|
||||||
|
```defaults write de.relikd.baRSS articlesInMenuLimit -int 40```
|
||||||
|
|
||||||
defaults write de.relikd.baRSS shortArticleNamesLimit -int 50
|
|
||||||
|
|
||||||
|
|
||||||
ToDo
|
ToDo
|
||||||
----
|
----
|
||||||
|
|
||||||
- [ ] Edit feed
|
- [ ] Missing
|
||||||
- [ ] Show statistics
|
- [ ] App Icon & UI icons (a shout out to all designers out there!)
|
||||||
- [x] How often gets the feed updated (min, max, avg)
|
- [ ] Text / UI localization
|
||||||
- [ ] Automatically choose best interval?
|
|
||||||
- [x] Show time of next update
|
|
||||||
- [ ] Feeds with authentication
|
- [ ] Feeds with authentication
|
||||||
|
- [ ] Sandbox (does work, except for:)
|
||||||
|
- [ ] Default RSS application checkbox (disable or other workaround)
|
||||||
|
|
||||||
|
|
||||||
- [ ] Other
|
- [ ] Nice to have (... on increased demand)
|
||||||
- [ ] App Icon
|
- [ ] Automatically choose best update interval (e.g., avg)
|
||||||
- [ ] Translate text to different languages
|
- [ ] Sync with online services
|
||||||
- [x] Download with ephemeral url session?
|
|
||||||
- [ ] Add Sandboxing
|
|
||||||
- [ ] Disable Startup checkbox (or other workaround)
|
|
||||||
|
|
||||||
|
|
||||||
- [ ] Additional features
|
|
||||||
- [ ] Sync with online services!
|
|
||||||
- [ ] Notification Center
|
- [ ] Notification Center
|
||||||
- [ ] Sleep timer. (e.g., disable updates during working hours)
|
- [ ] Distraction Mode
|
||||||
- [ ] Pure image feed? (show images directly in menu)
|
- [ ] Distract less: Sleep timer. (e.g., disable updates during working hours)
|
||||||
|
- [ ] Distract more: Automatically open feed items
|
||||||
|
- [ ] Add support for media types
|
||||||
|
- [ ] music / video? (open media player)
|
||||||
|
- [ ] Pure image feed? (show images directly in menu)
|
||||||
|
- [ ] Per feed / group settings
|
||||||
|
- [ ] select launch application (e.g., for podcasts)
|
||||||
|
- [ ] exclude unread count from menu bar (e.g., unimportant feeds)
|
||||||
- [ ] ~~Infinite storage. (load more button)~~
|
- [ ] ~~Infinite storage. (load more button)~~
|
||||||
- [ ] Automatically open feed items?
|
|
||||||
- [ ] Per feed launch application (e.g., for podcasts)
|
|
||||||
- [ ] Per group setting to exclude unread count from menu bar
|
|
||||||
|
|
||||||
|
|||||||
@@ -112,7 +112,7 @@
|
|||||||
54A07A7E220E04CF00082C51 /* NSFetchRequest+Ext.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSFetchRequest+Ext.m"; sourceTree = "<group>"; };
|
54A07A7E220E04CF00082C51 /* NSFetchRequest+Ext.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSFetchRequest+Ext.m"; sourceTree = "<group>"; };
|
||||||
54A07A80220E723D00082C51 /* MapUnreadTotal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MapUnreadTotal.h; sourceTree = "<group>"; };
|
54A07A80220E723D00082C51 /* MapUnreadTotal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MapUnreadTotal.h; sourceTree = "<group>"; };
|
||||||
54A07A81220E723D00082C51 /* MapUnreadTotal.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MapUnreadTotal.m; sourceTree = "<group>"; };
|
54A07A81220E723D00082C51 /* MapUnreadTotal.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MapUnreadTotal.m; sourceTree = "<group>"; };
|
||||||
54ACC27C21061B3B0020715F /* baRSS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = baRSS.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
54ACC27C21061B3B0020715F /* baRSS Beta.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "baRSS Beta.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
54ACC28321061B3B0020715F /* DBv1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = DBv1.xcdatamodel; sourceTree = "<group>"; };
|
54ACC28321061B3B0020715F /* DBv1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = DBv1.xcdatamodel; sourceTree = "<group>"; };
|
||||||
54ACC28521061B3C0020715F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
54ACC28521061B3C0020715F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
54ACC28A21061B3C0020715F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
54ACC28A21061B3C0020715F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
@@ -261,7 +261,7 @@
|
|||||||
54ACC27D21061B3B0020715F /* Products */ = {
|
54ACC27D21061B3B0020715F /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
54ACC27C21061B3B0020715F /* baRSS.app */,
|
54ACC27C21061B3B0020715F /* baRSS Beta.app */,
|
||||||
54CC042C2162532800A48795 /* baRSS-Helper.app */,
|
54CC042C2162532800A48795 /* baRSS-Helper.app */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
@@ -322,6 +322,7 @@
|
|||||||
544DCCBB212A2B4D002DBC46 /* Embed Frameworks */,
|
544DCCBB212A2B4D002DBC46 /* Embed Frameworks */,
|
||||||
544DCCBC212A2B5A002DBC46 /* CopyFiles */,
|
544DCCBC212A2B5A002DBC46 /* CopyFiles */,
|
||||||
54CC043D2162565F00A48795 /* CopyFiles */,
|
54CC043D2162565F00A48795 /* CopyFiles */,
|
||||||
|
543964EE2215C27B0016AAA3 /* ShellScript */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@@ -329,7 +330,7 @@
|
|||||||
);
|
);
|
||||||
name = baRSS;
|
name = baRSS;
|
||||||
productName = baRRS;
|
productName = baRRS;
|
||||||
productReference = 54ACC27C21061B3B0020715F /* baRSS.app */;
|
productReference = 54ACC27C21061B3B0020715F /* baRSS Beta.app */;
|
||||||
productType = "com.apple.product-type.application";
|
productType = "com.apple.product-type.application";
|
||||||
};
|
};
|
||||||
54CC042B2162532800A48795 /* baRSS-Helper */ = {
|
54CC042B2162532800A48795 /* baRSS-Helper */ = {
|
||||||
@@ -421,6 +422,26 @@
|
|||||||
};
|
};
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
543964EE2215C27B0016AAA3 /* ShellScript */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "# https://crunchybagel.com/auto-incrementing-build-numbers-in-xcode/\nbuildNumber=$(/usr/libexec/PlistBuddy -c \"Print CFBundleVersion\" \"${PROJECT_DIR}/${INFOPLIST_FILE}\")\nbuildNumber=$(($buildNumber + 1))\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $buildNumber\" \"${PROJECT_DIR}/${INFOPLIST_FILE}\"\n";
|
||||||
|
};
|
||||||
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
54ACC27821061B3B0020715F /* Sources */ = {
|
54ACC27821061B3B0020715F /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
@@ -617,7 +638,7 @@
|
|||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = de.relikd.baRSS.beta;
|
PRODUCT_BUNDLE_IDENTIFIER = de.relikd.baRSS.beta;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME) Beta";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
};
|
};
|
||||||
@@ -666,7 +687,7 @@
|
|||||||
"$(FRAMEWORK_SEARCH_PATHS)",
|
"$(FRAMEWORK_SEARCH_PATHS)",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = de.relikd.baRSS.beta;
|
PRODUCT_BUNDLE_IDENTIFIER = de.relikd.baRSS;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -55,15 +55,18 @@
|
|||||||
|
|
||||||
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent {
|
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent {
|
||||||
NSString *url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
|
NSString *url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
|
||||||
if ([url hasPrefix:@"feed:"]) {
|
NSString *scheme = [[[NSURL URLWithString:url] scheme] lowercaseString];
|
||||||
// TODO: handle other app schemes like configuration export / import
|
url = [url substringFromIndex:scheme.length + 1]; // + ':'
|
||||||
url = [url substringFromIndex:5];
|
if (url.length >= 2 && [[url substringToIndex:2] isEqualToString:@"//"]) {
|
||||||
if ([url hasPrefix:@"//"])
|
url = [url substringFromIndex:2];
|
||||||
url = [url substringFromIndex:2];
|
}
|
||||||
|
if ([scheme isEqualToString:@"feed"]) {
|
||||||
[FeedDownload autoDownloadAndParseURL:url successBlock:^{
|
[FeedDownload autoDownloadAndParseURL:url successBlock:^{
|
||||||
[self reopenPreferencesIfOpen];
|
[self reopenPreferencesIfOpen];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
// TODO: handle other app schemes like configuration export / import
|
||||||
|
// NSURLComponents *comp = [NSURLComponents componentsWithString:url];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -182,7 +185,7 @@ static NSEventModifierFlags fnKeyFlags = NSEventModifierFlagShift | NSEventModif
|
|||||||
case 'c': if ([self sendAction:@selector(copy:) to:nil from:self]) return; break;
|
case 'c': if ([self sendAction:@selector(copy:) to:nil from:self]) return; break;
|
||||||
case 'v': if ([self sendAction:@selector(paste:) to:nil from:self]) return; break;
|
case 'v': if ([self sendAction:@selector(paste:) to:nil from:self]) return; break;
|
||||||
case 'a': if ([self sendAction:@selector(selectAll:) to:nil from:self]) return; break;
|
case 'a': if ([self sendAction:@selector(selectAll:) to:nil from:self]) return; break;
|
||||||
case 'q': if ([self sendAction:@selector(terminate:) to:nil from:self]) return; break;
|
case 'q': if ([self sendAction:@selector(performClose:) to:nil from:self]) return; break;
|
||||||
case 'w': if ([self sendAction:@selector(performClose:) to:nil from:self]) return; break;
|
case 'w': if ([self sendAction:@selector(performClose:) to:nil from:self]) return; break;
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wundeclared-selector"
|
#pragma clang diagnostic ignored "-Wundeclared-selector"
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
@class RSParsedFeed;
|
@class RSParsedFeed;
|
||||||
|
|
||||||
@interface Feed (Ext)
|
@interface Feed (Ext)
|
||||||
|
@property (nonnull, readonly) NSImage* iconImage16;
|
||||||
|
|
||||||
// Generator methods / Feed update
|
// Generator methods / Feed update
|
||||||
+ (instancetype)newFeedAndMetaInContext:(NSManagedObjectContext*)context;
|
+ (instancetype)newFeedAndMetaInContext:(NSManagedObjectContext*)context;
|
||||||
+ (instancetype)appendToRootWithDefaultIntervalInContext:(NSManagedObjectContext*)moc;
|
+ (instancetype)appendToRootWithDefaultIntervalInContext:(NSManagedObjectContext*)moc;
|
||||||
@@ -35,6 +37,5 @@
|
|||||||
// Article properties
|
// Article properties
|
||||||
- (NSArray<FeedArticle*>*)sortedArticles;
|
- (NSArray<FeedArticle*>*)sortedArticles;
|
||||||
// Icon
|
// Icon
|
||||||
- (NSImage*)iconImage16;
|
|
||||||
- (BOOL)setIconImage:(NSImage*)img;
|
- (BOOL)setIconImage:(NSImage*)img;
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
item.title = self.group.nameOrError;
|
item.title = self.group.nameOrError;
|
||||||
item.toolTip = self.subtitle;
|
item.toolTip = self.subtitle;
|
||||||
item.enabled = (self.articles.count > 0);
|
item.enabled = (self.articles.count > 0);
|
||||||
item.image = [self iconImage16];
|
item.image = self.iconImage16;
|
||||||
item.representedObject = self.indexPath;
|
item.representedObject = self.indexPath;
|
||||||
item.target = [self class];
|
item.target = [self class];
|
||||||
item.action = @selector(didClickOnMenuItem:);
|
item.action = @selector(didClickOnMenuItem:);
|
||||||
@@ -200,30 +200,17 @@
|
|||||||
/**
|
/**
|
||||||
@return Return @c 16x16px image. Either from core data storage or generated default RSS icon.
|
@return Return @c 16x16px image. Either from core data storage or generated default RSS icon.
|
||||||
*/
|
*/
|
||||||
- (NSImage*)iconImage16 {
|
- (nonnull NSImage*)iconImage16 {
|
||||||
NSData *imgData = self.icon.icon;
|
NSImage *img = nil;
|
||||||
if (imgData)
|
if (self.articles.count == 0) {
|
||||||
{
|
img = [NSImage imageNamed:NSImageNameCaution];
|
||||||
NSImage *img = [[NSImage alloc] initWithData:imgData];
|
} else if (self.icon.icon) {
|
||||||
[img setSize:NSMakeSize(16, 16)];
|
img = [[NSImage alloc] initWithData:self.icon.icon];
|
||||||
return img;
|
} else {
|
||||||
}
|
return [RSSIcon iconWithSize:16]; // TODO: setup imageNamed: for default rss icon?
|
||||||
else if (self.articles.count == 0)
|
|
||||||
{
|
|
||||||
static NSImage *warningIcon;
|
|
||||||
if (!warningIcon) {
|
|
||||||
warningIcon = [NSImage imageNamed:NSImageNameCaution];
|
|
||||||
[warningIcon setSize:NSMakeSize(16, 16)];
|
|
||||||
}
|
|
||||||
return warningIcon;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
static NSImage *defaultRSSIcon; // TODO: setup imageNamed: for default rss icon
|
|
||||||
if (!defaultRSSIcon)
|
|
||||||
defaultRSSIcon = [RSSIcon iconWithSize:16];
|
|
||||||
return defaultRSSIcon;
|
|
||||||
}
|
}
|
||||||
|
[img setSize:NSMakeSize(16, 16)];
|
||||||
|
return img;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -35,13 +35,16 @@
|
|||||||
fa.unread = YES;
|
fa.unread = YES;
|
||||||
fa.guid = entry.guid;
|
fa.guid = entry.guid;
|
||||||
fa.title = entry.title;
|
fa.title = entry.title;
|
||||||
fa.abstract = entry.abstract;
|
if (entry.abstract.length > 0) { // remove html tags and save plain text to db
|
||||||
|
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<[^>]*>" options:kNilOptions error:nil];
|
||||||
|
fa.abstract = [regex stringByReplacingMatchesInString:entry.abstract options:kNilOptions range:NSMakeRange(0, entry.abstract.length) withTemplate:@""];
|
||||||
|
}
|
||||||
fa.body = entry.body;
|
fa.body = entry.body;
|
||||||
fa.author = entry.author;
|
fa.author = entry.author;
|
||||||
fa.link = entry.link;
|
fa.link = entry.link;
|
||||||
fa.published = entry.datePublished;
|
fa.published = entry.datePublished;
|
||||||
if (!fa.published)
|
if (!fa.link) fa.link = entry.guid; // may be wrong, but better than returning nothing.
|
||||||
fa.published = entry.dateModified;
|
if (!fa.published) fa.published = entry.dateModified;
|
||||||
return fa;
|
return fa;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,12 +67,7 @@
|
|||||||
item.title = [self shortArticleName];
|
item.title = [self shortArticleName];
|
||||||
item.enabled = (self.link.length > 0);
|
item.enabled = (self.link.length > 0);
|
||||||
item.state = (self.unread && [UserPrefs defaultYES:@"feedTickMark"] ? NSControlStateValueOn : NSControlStateValueOff);
|
item.state = (self.unread && [UserPrefs defaultYES:@"feedTickMark"] ? NSControlStateValueOn : NSControlStateValueOff);
|
||||||
//mi.toolTip = item.abstract;
|
item.toolTip = self.abstract;
|
||||||
// TODO: Do regex during save, not during display. Its here for testing purposes ...
|
|
||||||
if (self.abstract.length > 0) {
|
|
||||||
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<[^>]*>" options:kNilOptions error:nil];
|
|
||||||
item.toolTip = [regex stringByReplacingMatchesInString:self.abstract options:kNilOptions range:NSMakeRange(0, self.abstract.length) withTemplate:@""];
|
|
||||||
}
|
|
||||||
item.representedObject = self.objectID;
|
item.representedObject = self.objectID;
|
||||||
item.target = [self class];
|
item.target = [self class];
|
||||||
item.action = @selector(didClickOnMenuItem:);
|
item.action = @selector(didClickOnMenuItem:);
|
||||||
@@ -78,16 +76,18 @@
|
|||||||
|
|
||||||
/// Callback method for @c NSMenuItem. Will open url associated with @c FeedArticle and mark it read.
|
/// Callback method for @c NSMenuItem. Will open url associated with @c FeedArticle and mark it read.
|
||||||
+ (void)didClickOnMenuItem:(NSMenuItem*)sender {
|
+ (void)didClickOnMenuItem:(NSMenuItem*)sender {
|
||||||
|
BOOL flipUnread = (([NSEvent modifierFlags] & NSEventModifierFlagOption) != 0);
|
||||||
NSManagedObjectContext *moc = [StoreCoordinator createChildContext];
|
NSManagedObjectContext *moc = [StoreCoordinator createChildContext];
|
||||||
FeedArticle *fa = [moc objectWithID:sender.representedObject];
|
FeedArticle *fa = [moc objectWithID:sender.representedObject];
|
||||||
NSString *url = fa.link;
|
NSString *url = fa.link;
|
||||||
if (fa.unread) {
|
if (flipUnread || fa.unread) {
|
||||||
fa.unread = NO;
|
fa.unread = !fa.unread;
|
||||||
|
NSNumber *num = (fa.unread ? @+1 : @-1);
|
||||||
[StoreCoordinator saveContext:moc andParent:YES];
|
[StoreCoordinator saveContext:moc andParent:YES];
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationTotalUnreadCountChanged object:@-1];
|
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationTotalUnreadCountChanged object:num];
|
||||||
}
|
}
|
||||||
[moc reset];
|
[moc reset];
|
||||||
if (url && url.length > 0)
|
if (url && url.length > 0 && !flipUnread) // flipUnread == change unread state
|
||||||
[UserPrefs openURLsWithPreferredBrowser:@[[NSURL URLWithString:url]]];
|
[UserPrefs openURLsWithPreferredBrowser:@[[NSURL URLWithString:url]]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,11 +34,12 @@ typedef NS_ENUM(int16_t, FeedGroupType) {
|
|||||||
/// Overwrites @c type attribute with enum. Use one of: @c GROUP, @c FEED, @c SEPARATOR.
|
/// Overwrites @c type attribute with enum. Use one of: @c GROUP, @c FEED, @c SEPARATOR.
|
||||||
@property (nonatomic) FeedGroupType type;
|
@property (nonatomic) FeedGroupType type;
|
||||||
@property (nonnull, readonly) NSString *nameOrError;
|
@property (nonnull, readonly) NSString *nameOrError;
|
||||||
|
@property (nonnull, readonly) NSImage* groupIconImage16;
|
||||||
|
@property (nonnull, readonly) NSImage* iconImage16;
|
||||||
|
|
||||||
+ (instancetype)newGroup:(FeedGroupType)type inContext:(NSManagedObjectContext*)context;
|
+ (instancetype)newGroup:(FeedGroupType)type inContext:(NSManagedObjectContext*)context;
|
||||||
- (void)setParent:(FeedGroup *)parent andSortIndex:(int32_t)sortIndex;
|
- (void)setParent:(FeedGroup *)parent andSortIndex:(int32_t)sortIndex;
|
||||||
- (void)setNameIfChanged:(NSString*)name;
|
- (void)setNameIfChanged:(NSString*)name;
|
||||||
- (NSImage*)groupIconImage16;
|
|
||||||
- (NSMenuItem*)newMenuItem;
|
- (NSMenuItem*)newMenuItem;
|
||||||
// Handle children and parents
|
// Handle children and parents
|
||||||
- (NSString*)indexPathString;
|
- (NSString*)indexPathString;
|
||||||
|
|||||||
@@ -27,6 +27,33 @@
|
|||||||
|
|
||||||
@implementation FeedGroup (Ext)
|
@implementation FeedGroup (Ext)
|
||||||
|
|
||||||
|
#pragma mark - Properties
|
||||||
|
|
||||||
|
/// @return Returns "(error)" if @c self.name is @c nil.
|
||||||
|
- (nonnull NSString*)nameOrError {
|
||||||
|
return (self.name ? self.name : NSLocalizedString(@"(error)", nil));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @return Return @c 16x16px NSImageNameFolder image.
|
||||||
|
- (nonnull NSImage*)groupIconImage16 {
|
||||||
|
NSImage *groupIcon = [NSImage imageNamed:NSImageNameFolder];
|
||||||
|
groupIcon.size = NSMakeSize(16, 16);
|
||||||
|
return groupIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return Return @c 16x16px image.
|
||||||
|
Either feed icon ( @c type @c == @c FEED ) or @c NSImageNameFolder ( @c type @c == @c GROUP ).
|
||||||
|
*/
|
||||||
|
- (nonnull NSImage*)iconImage16 {
|
||||||
|
if (self.type == FEED)
|
||||||
|
return self.feed.iconImage16;
|
||||||
|
return self.groupIconImage16;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma mark - Generator
|
||||||
|
|
||||||
/// Create new instance and set @c Feed and @c FeedMeta if group type is @c FEED
|
/// Create new instance and set @c Feed and @c FeedMeta if group type is @c FEED
|
||||||
+ (instancetype)newGroup:(FeedGroupType)type inContext:(NSManagedObjectContext*)moc {
|
+ (instancetype)newGroup:(FeedGroupType)type inContext:(NSManagedObjectContext*)moc {
|
||||||
FeedGroup *fg = [[FeedGroup alloc] initWithEntity: FeedGroup.entity insertIntoManagedObjectContext:moc];
|
FeedGroup *fg = [[FeedGroup alloc] initWithEntity: FeedGroup.entity insertIntoManagedObjectContext:moc];
|
||||||
@@ -49,27 +76,12 @@
|
|||||||
self.name = name;
|
self.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @return Return static @c 16x16px NSImageNameFolder image.
|
|
||||||
- (NSImage*)groupIconImage16 {
|
|
||||||
static NSImage *groupIcon;
|
|
||||||
if (!groupIcon) {
|
|
||||||
groupIcon = [NSImage imageNamed:NSImageNameFolder];
|
|
||||||
groupIcon.size = NSMakeSize(16, 16);
|
|
||||||
}
|
|
||||||
return groupIcon;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @return Returns "(error)" if @c self.name is @c nil.
|
|
||||||
- (nonnull NSString*)nameOrError {
|
|
||||||
return (self.name ? self.name : NSLocalizedString(@"(error)", nil));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @return Fully initialized @c NSMenuItem with @c title and @c image.
|
/// @return Fully initialized @c NSMenuItem with @c title and @c image.
|
||||||
- (NSMenuItem*)newMenuItem {
|
- (NSMenuItem*)newMenuItem {
|
||||||
NSMenuItem *item = [NSMenuItem new];
|
NSMenuItem *item = [NSMenuItem new];
|
||||||
item.title = self.nameOrError;
|
item.title = self.nameOrError;
|
||||||
item.enabled = (self.children.count > 0);
|
item.enabled = (self.children.count > 0);
|
||||||
item.image = [self groupIconImage16];
|
item.image = self.groupIconImage16;
|
||||||
item.representedObject = self.objectID;
|
item.representedObject = self.objectID;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -229,6 +229,7 @@ static BOOL _nextUpdateIsForced = NO;
|
|||||||
}
|
}
|
||||||
if (!error) { // metaBlock may set error
|
if (!error) { // metaBlock may set error
|
||||||
RSFeedParser *parser = [RSFeedParser parserWithXMLData:xml];
|
RSFeedParser *parser = [RSFeedParser parserWithXMLData:xml];
|
||||||
|
parser.dontStopOnLowerAsciiBytes = YES;
|
||||||
result = [parser parseSync:&error];
|
result = [parser parseSync:&error];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>0.9</string>
|
<string>0.9.2</string>
|
||||||
<key>CFBundleURLTypes</key>
|
<key>CFBundleURLTypes</key>
|
||||||
<array>
|
<array>
|
||||||
<dict>
|
<dict>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>1122</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||||
<key>LSUIElement</key>
|
<key>LSUIElement</key>
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>Copyright © 2018 relikd. Public Domain.</string>
|
<string>Copyright © 2019 relikd. Public Domain.</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
<string>AppHook</string>
|
<string>AppHook</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
#pragma mark - ModalEditDialog -
|
#pragma mark - ModalEditDialog -
|
||||||
|
|
||||||
|
|
||||||
@interface ModalEditDialog()
|
@interface ModalEditDialog() <NSWindowDelegate>
|
||||||
@property (strong) FeedGroup *feedGroup;
|
@property (strong) FeedGroup *feedGroup;
|
||||||
@property (strong) ModalSheet *modalSheet;
|
@property (strong) ModalSheet *modalSheet;
|
||||||
@end
|
@end
|
||||||
@@ -47,8 +47,10 @@
|
|||||||
}
|
}
|
||||||
/// @return New @c ModalSheet with its subclass @c .view property as dialog content.
|
/// @return New @c ModalSheet with its subclass @c .view property as dialog content.
|
||||||
- (ModalSheet *)getModalSheet {
|
- (ModalSheet *)getModalSheet {
|
||||||
if (!self.modalSheet)
|
if (!self.modalSheet) {
|
||||||
self.modalSheet = [[ModalSheet alloc] initWithView:self.view];
|
self.modalSheet = [[ModalSheet alloc] initWithView:self.view];
|
||||||
|
self.modalSheet.delegate = self;
|
||||||
|
}
|
||||||
return self.modalSheet;
|
return self.modalSheet;
|
||||||
}
|
}
|
||||||
/// This method should be overridden by subclasses. Used to save changes to persistent store.
|
/// This method should be overridden by subclasses. Used to save changes to persistent store.
|
||||||
@@ -297,6 +299,15 @@
|
|||||||
#pragma mark - NSTextField Delegate
|
#pragma mark - NSTextField Delegate
|
||||||
|
|
||||||
|
|
||||||
|
/// Window delegate will be only called on button 'Done'.
|
||||||
|
- (BOOL)windowShouldClose:(NSWindow *)sender {
|
||||||
|
if (![self.previousURL isEqualToString:self.url.stringValue]) {
|
||||||
|
[[NSNotificationCenter defaultCenter] postNotificationName:NSControlTextDidEndEditingNotification object:self.url];
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
/// Whenever the user finished entering the url (return key or focus change) perform a download request.
|
/// Whenever the user finished entering the url (return key or focus change) perform a download request.
|
||||||
- (void)controlTextDidEndEditing:(NSNotification *)obj {
|
- (void)controlTextDidEndEditing:(NSNotification *)obj {
|
||||||
if (obj.object == self.url) {
|
if (obj.object == self.url) {
|
||||||
|
|||||||
@@ -98,6 +98,10 @@ static NSString *dragNodeType = @"baRSS-feed-drag";
|
|||||||
NSDate *date = [FeedDownload dateScheduled];
|
NSDate *date = [FeedDownload dateScheduled];
|
||||||
if (date) {
|
if (date) {
|
||||||
double nextFire = fabs(date.timeIntervalSinceNow);
|
double nextFire = fabs(date.timeIntervalSinceNow);
|
||||||
|
if (nextFire > 1e9) { // distance future, over 31 years
|
||||||
|
self.spinnerLabel.stringValue = @"";
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (nextFire > 60) { // update 1/min
|
if (nextFire > 60) { // update 1/min
|
||||||
nextFire = fmod(nextFire, 60); // next update will align with minute
|
nextFire = fmod(nextFire, 60); // next update will align with minute
|
||||||
} else {
|
} else {
|
||||||
@@ -415,7 +419,7 @@ static NSString *dragNodeType = @"baRSS-feed-drag";
|
|||||||
return cellView; // refresh cell already skipped with the above if condition
|
return cellView; // refresh cell already skipped with the above if condition
|
||||||
} else {
|
} else {
|
||||||
cellView.textField.objectValue = fg.name;
|
cellView.textField.objectValue = fg.name;
|
||||||
cellView.imageView.image = (fg.type == GROUP ? [NSImage imageNamed:NSImageNameFolder] : [fg.feed iconImage16]);
|
cellView.imageView.image = fg.iconImage16;
|
||||||
}
|
}
|
||||||
return cellView;
|
return cellView;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,5 +23,5 @@
|
|||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
@interface SettingsGeneral : NSViewController
|
@interface SettingsGeneral : NSViewController
|
||||||
|
@property (assign) IBOutlet NSView *appearanceView;
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -64,7 +64,11 @@
|
|||||||
NSUInteger deleted = [StoreCoordinator deleteUnreferenced];
|
NSUInteger deleted = [StoreCoordinator deleteUnreferenced];
|
||||||
[StoreCoordinator restoreFeedIndexPaths];
|
[StoreCoordinator restoreFeedIndexPaths];
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationTotalUnreadCountReset object:nil];
|
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationTotalUnreadCountReset object:nil];
|
||||||
NSLog(@"Removed %lu unreferenced core data entries.", deleted);
|
// show only if >0, but hey, this button will vanish anyway ...
|
||||||
|
NSAlert *alert = [[NSAlert alloc] init];
|
||||||
|
alert.messageText = [NSString stringWithFormat:@"Removed %lu unreferenced core data entries.", deleted];
|
||||||
|
alert.alertStyle = NSAlertStyleInformational;
|
||||||
|
[alert runModal];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)changeMenuBarIconSetting:(NSButton*)sender {
|
- (IBAction)changeMenuBarIconSetting:(NSButton*)sender {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="SettingsGeneral">
|
<customObject id="-2" userLabel="File's Owner" customClass="SettingsGeneral">
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="appearanceView" destination="Wwh-0p-tPi" id="51l-Wp-k0J"/>
|
||||||
<outlet property="popupDefaultRSSReader" destination="tJe-jL-nUu" id="DUq-ti-Drf"/>
|
<outlet property="popupDefaultRSSReader" destination="tJe-jL-nUu" id="DUq-ti-Drf"/>
|
||||||
<outlet property="popupHttpApplication" destination="BcN-gW-jBg" id="X2r-Nn-igN"/>
|
<outlet property="popupHttpApplication" destination="BcN-gW-jBg" id="X2r-Nn-igN"/>
|
||||||
<outlet property="view" destination="mbb-wD-pDD" id="Syb-4w-ekh"/>
|
<outlet property="view" destination="mbb-wD-pDD" id="Syb-4w-ekh"/>
|
||||||
@@ -37,287 +38,8 @@
|
|||||||
</binding>
|
</binding>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Eyy-w7-79K">
|
|
||||||
<rect key="frame" x="18" y="209" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Z56-ik-iHk">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.globalUpdateAll" id="FrQ-u0-lFo">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Xbr-a8-v9X">
|
|
||||||
<rect key="frame" x="18" y="187" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="FT6-me-ACu">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.globalOpenUnread" id="c20-0p-cPb">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="kO5-iF-mZX">
|
|
||||||
<rect key="frame" x="44" y="187" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="4uj-0i-drs">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.groupOpenUnread" id="mCn-aE-DwT">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZVR-xf-ZeB">
|
|
||||||
<rect key="frame" x="70" y="187" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="tQ4-MK-ghd">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedOpenUnread" id="Qyh-BN-P74">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="lAu-qx-vWl">
|
|
||||||
<rect key="frame" x="18" y="165" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="8Ko-Cq-fCy">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.globalMarkRead" id="uiO-3M-xfT">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hAY-eb-Ygs">
|
|
||||||
<rect key="frame" x="44" y="165" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="vBc-4I-hsa">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.groupMarkRead" id="YLZ-t8-Jbk">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="TfV-CA-pjd">
|
|
||||||
<rect key="frame" x="70" y="165" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="OPa-de-9M3">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedMarkRead" id="mYj-26-0OV">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="eKg-IL-v85">
|
|
||||||
<rect key="frame" x="18" y="143" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="K4h-ul-R6b">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.globalMarkUnread" id="drp-87-kfY">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="z97-Z3-YRK">
|
|
||||||
<rect key="frame" x="44" y="143" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="bYm-jJ-lA7">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.groupMarkUnread" id="bJP-0I-l7t">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yGm-6r-8xg">
|
|
||||||
<rect key="frame" x="70" y="143" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="KHI-ra-F11">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedMarkUnread" id="mRu-7M-3bu">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QYu-9A-RSx">
|
|
||||||
<rect key="frame" x="18" y="121" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="NHd-8Y-lgR">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="changeMenuBarIconSetting:" target="-2" id="2Eq-PQ-ffr"/>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.globalUnreadCount" id="dyl-pE-j2k">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="iGf-ZI-o6t">
|
|
||||||
<rect key="frame" x="44" y="121" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="fhA-hO-eSv">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.groupUnreadCount" id="Mg5-xJ-L3n">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ezY-pZ-WN7">
|
|
||||||
<rect key="frame" x="70" y="121" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="PgG-Pm-s9M">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedUnreadCount" id="hnm-Q2-kbs">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4Z4-ko-oj2">
|
|
||||||
<rect key="frame" x="70" y="99" width="22" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="3cL-4f-90v">
|
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedTickMark" id="xKL-Lh-tBL">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fey-RP-7wF">
|
|
||||||
<rect key="frame" x="96" y="210" width="206" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Update all feeds" id="Yy6-xr-m0l">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VhY-mw-Rej">
|
|
||||||
<rect key="frame" x="96" y="188" width="206" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Open all unread" id="lVL-bb-uA6">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qFU-En-OSw">
|
|
||||||
<rect key="frame" x="96" y="166" width="206" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Mark all read" id="XD8-5a-Hlg">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="oFG-IQ-p9b">
|
|
||||||
<rect key="frame" x="96" y="144" width="206" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Mark all unread" id="PJI-mv-AnH">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tjr-Of-qZE">
|
|
||||||
<rect key="frame" x="96" y="122" width="206" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Number of unread items" id="JZc-eZ-uTe">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="K4q-A1-Fi9">
|
|
||||||
<rect key="frame" x="96" y="100" width="206" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Tick mark unread items" id="a7h-dX-8Vg">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2sG-NO-OJz">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2sG-NO-OJz">
|
||||||
<rect key="frame" x="18" y="49" width="133" height="17"/>
|
<rect key="frame" x="18" y="254" width="133" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Open URLs with:" id="vNb-i3-dvE">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Open URLs with:" id="vNb-i3-dvE">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -326,8 +48,8 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="BcN-gW-jBg">
|
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="BcN-gW-jBg">
|
||||||
<rect key="frame" x="155" y="44" width="148" height="26"/>
|
<rect key="frame" x="155" y="249" width="148" height="26"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="-- list --" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="qW6-vv-pdE" id="R91-En-pHg">
|
<popUpButtonCell key="cell" type="push" title="-- list --" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="qW6-vv-pdE" id="R91-En-pHg">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@@ -341,61 +63,8 @@
|
|||||||
<action selector="changeHttpApplication:" target="-2" id="Cyb-ab-VNu"/>
|
<action selector="changeHttpApplication:" target="-2" id="Cyb-ab-VNu"/>
|
||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<customView toolTip="Show in menu bar" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="P4Y-i1-MGE" customClass="SettingsIconGlobal">
|
|
||||||
<rect key="frame" x="20" y="235" width="18" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<userDefinedRuntimeAttributes>
|
|
||||||
<userDefinedRuntimeAttribute type="color" keyPath="color">
|
|
||||||
<color key="value" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</userDefinedRuntimeAttribute>
|
|
||||||
<userDefinedRuntimeAttribute type="number" keyPath="roundness">
|
|
||||||
<real key="value" value="40"/>
|
|
||||||
</userDefinedRuntimeAttribute>
|
|
||||||
</userDefinedRuntimeAttributes>
|
|
||||||
</customView>
|
|
||||||
<customView toolTip="Show in group menu" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="SKf-Y7-8xS" customClass="SettingsIconGroup">
|
|
||||||
<rect key="frame" x="46" y="235" width="18" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<userDefinedRuntimeAttributes>
|
|
||||||
<userDefinedRuntimeAttribute type="color" keyPath="color">
|
|
||||||
<color key="value" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</userDefinedRuntimeAttribute>
|
|
||||||
<userDefinedRuntimeAttribute type="number" keyPath="roundness">
|
|
||||||
<real key="value" value="40"/>
|
|
||||||
</userDefinedRuntimeAttribute>
|
|
||||||
</userDefinedRuntimeAttributes>
|
|
||||||
</customView>
|
|
||||||
<customView toolTip="Show in feed menu" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="18m-2g-bqW" customClass="RSSIcon">
|
|
||||||
<rect key="frame" x="72" y="235" width="18" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<userDefinedRuntimeAttributes>
|
|
||||||
<userDefinedRuntimeAttribute type="number" keyPath="roundness">
|
|
||||||
<real key="value" value="40"/>
|
|
||||||
</userDefinedRuntimeAttribute>
|
|
||||||
<userDefinedRuntimeAttribute type="color" keyPath="color">
|
|
||||||
<color key="value" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</userDefinedRuntimeAttribute>
|
|
||||||
</userDefinedRuntimeAttributes>
|
|
||||||
</customView>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Tec-F3-9cE">
|
|
||||||
<rect key="frame" x="18" y="271" width="284" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Tint menu bar icon" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="19k-mc-RLe">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="changeMenuBarIconSetting:" target="-2" id="HYX-cD-a5Z"/>
|
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.tintMenuBarIcon" id="WON-AK-QIa">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<integer key="NSNullPlaceholder" value="1"/>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="TC5-cu-zUi">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="TC5-cu-zUi">
|
||||||
<rect key="frame" x="18" y="22" width="133" height="17"/>
|
<rect key="frame" x="18" y="227" width="133" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Default RSS Reader:" id="wvK-Oz-Kk3">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Default RSS Reader:" id="wvK-Oz-Kk3">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -404,8 +73,8 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tJe-jL-nUu">
|
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tJe-jL-nUu">
|
||||||
<rect key="frame" x="155" y="17" width="148" height="26"/>
|
<rect key="frame" x="155" y="222" width="148" height="26"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="-- list --" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="4Gg-hZ-mh4" id="saR-9h-TWE">
|
<popUpButtonCell key="cell" type="push" title="-- list --" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="4Gg-hZ-mh4" id="saR-9h-TWE">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@@ -420,8 +89,8 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QwE-M7-q2R">
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QwE-M7-q2R">
|
||||||
<rect key="frame" x="206" y="279" width="100" height="32"/>
|
<rect key="frame" x="151" y="13" width="155" height="32"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
<buttonCell key="cell" type="push" title="Fix Cache" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ady-2s-Ggm">
|
<buttonCell key="cell" type="push" title="Fix Cache" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ady-2s-Ggm">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -430,15 +99,354 @@
|
|||||||
<action selector="fixCache:" target="-2" id="gbM-hA-UVF"/>
|
<action selector="fixCache:" target="-2" id="gbM-hA-UVF"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MrI-IA-Ruj">
|
</subviews>
|
||||||
<rect key="frame" x="70" y="77" width="22" height="18"/>
|
<point key="canvasLocation" x="33" y="-153.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
</customView>
|
||||||
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" inset="2" id="ixW-l7-SDZ">
|
<customView id="Wwh-0p-tPi" userLabel="Appearance View">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="320" height="327"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="c5z-lV-vas">
|
||||||
|
<rect key="frame" x="18" y="241" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="fhM-ZU-dqf">
|
||||||
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedShortNames" id="E0p-Yy-3lu">
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.globalUpdateAll" id="ObW-85-BJh">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qwe-HI-3qV">
|
||||||
|
<rect key="frame" x="18" y="219" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="PFz-Ow-r4F">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.globalOpenUnread" id="1gJ-DS-qv0">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ROH-bm-RYb">
|
||||||
|
<rect key="frame" x="44" y="219" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="z0G-PF-7X4">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.groupOpenUnread" id="IVo-sw-mcs">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="a64-GA-uqO">
|
||||||
|
<rect key="frame" x="70" y="219" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="5lC-Kd-cxG">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedOpenUnread" id="3NW-RY-kOa">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="IAr-hA-5en">
|
||||||
|
<rect key="frame" x="18" y="197" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="pfa-9f-faM">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.globalMarkRead" id="ZwQ-Dn-ocg">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HVG-vG-GIU">
|
||||||
|
<rect key="frame" x="44" y="197" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="oje-pE-GW8">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.groupMarkRead" id="hya-HG-RtW">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Gtu-6h-y3W">
|
||||||
|
<rect key="frame" x="70" y="197" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="t0S-h2-fFL">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedMarkRead" id="ILe-xm-ITh">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="utE-1U-oPJ">
|
||||||
|
<rect key="frame" x="18" y="175" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="HwB-CY-h1x">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.globalMarkUnread" id="vc4-oK-5yY">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6wd-KD-Vq2">
|
||||||
|
<rect key="frame" x="44" y="175" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="9UH-v7-h2R">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.groupMarkUnread" id="bUj-qA-Wnt">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="upF-tg-Zfs">
|
||||||
|
<rect key="frame" x="70" y="175" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="8d6-wr-mdT">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedMarkUnread" id="0ES-Df-AI3">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="E0O-SU-lzt">
|
||||||
|
<rect key="frame" x="18" y="153" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Vyz-7h-H3B">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="changeMenuBarIconSetting:" target="-2" id="0aa-UD-1gK"/>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.globalUnreadCount" id="2hk-H9-Oac">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vye-pf-bkq">
|
||||||
|
<rect key="frame" x="44" y="153" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="dRK-ge-IL7">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.groupUnreadCount" id="y2V-ws-n4p">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fmJ-ac-dcb">
|
||||||
|
<rect key="frame" x="70" y="153" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Nwc-Rx-Wbu">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedUnreadCount" id="OhX-uY-UA2">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ijX-fP-IQG">
|
||||||
|
<rect key="frame" x="70" y="131" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="CiI-wC-qa8">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedTickMark" id="Aia-Br-J5d">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Ibh-Ob-COI">
|
||||||
|
<rect key="frame" x="96" y="242" width="206" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Update all feeds" id="mqk-td-Ely">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MAh-pk-fPm">
|
||||||
|
<rect key="frame" x="96" y="220" width="206" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Open all unread" id="3Wk-Ys-6Dg">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fue-A5-JZt">
|
||||||
|
<rect key="frame" x="96" y="198" width="206" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Mark all read" id="qYo-AP-Ima">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1d6-T8-AME">
|
||||||
|
<rect key="frame" x="96" y="176" width="206" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Mark all unread" id="sp9-DH-f2e">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hQY-zw-PVG">
|
||||||
|
<rect key="frame" x="96" y="154" width="206" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Number of unread items" id="fya-vs-MV6">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QZ1-Mq-gky">
|
||||||
|
<rect key="frame" x="96" y="132" width="206" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Tick mark unread items" id="IYd-BL-Sc8">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<customView toolTip="Show in menu bar" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="0hm-pR-8ua" customClass="SettingsIconGlobal">
|
||||||
|
<rect key="frame" x="20" y="289" width="18" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="color" keyPath="color">
|
||||||
|
<color key="value" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="roundness">
|
||||||
|
<real key="value" value="40"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</customView>
|
||||||
|
<customView toolTip="Show in group menu" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="lfC-et-W8m" customClass="SettingsIconGroup">
|
||||||
|
<rect key="frame" x="46" y="289" width="18" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="color" keyPath="color">
|
||||||
|
<color key="value" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="roundness">
|
||||||
|
<real key="value" value="40"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</customView>
|
||||||
|
<customView toolTip="Show in feed menu" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7Gn-Uq-6lG" customClass="RSSIcon">
|
||||||
|
<rect key="frame" x="72" y="289" width="18" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="roundness">
|
||||||
|
<real key="value" value="40"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="color" keyPath="color">
|
||||||
|
<color key="value" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</customView>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Jug-kR-uf7">
|
||||||
|
<rect key="frame" x="18" y="263" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="JGj-fV-11r">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="changeMenuBarIconSetting:" target="-2" id="QXH-tb-Egy"/>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.tintMenuBarIcon" id="1N3-KQ-wbC">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="1"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="i0v-Fd-POW">
|
||||||
|
<rect key="frame" x="70" y="109" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" inset="2" id="Wsi-Zb-ug5">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedShortNames" id="dny-kJ-AZM">
|
||||||
<dictionary key="options">
|
<dictionary key="options">
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
<integer key="NSNullPlaceholder" value="0"/>
|
<integer key="NSNullPlaceholder" value="0"/>
|
||||||
@@ -446,17 +454,51 @@
|
|||||||
</binding>
|
</binding>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<textField toolTip="Truncate article title after 60 characters" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="u6A-qA-zxZ">
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="saw-1G-eHz">
|
||||||
<rect key="frame" x="96" y="78" width="206" height="17"/>
|
<rect key="frame" x="70" y="87" width="22" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" inset="2" id="8LB-X9-2tl">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="iU7-KA-nY5" name="value" keyPath="values.feedLimitArticles" id="Hd2-Pr-n6T">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<integer key="NSNullPlaceholder" value="0"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<textField toolTip="Truncate article title after 60 characters" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="p7p-HI-ePS">
|
||||||
|
<rect key="frame" x="96" y="110" width="206" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Short article names" id="Fh4-U9-Rnv">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Short article names" id="S8K-hH-Ssj">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField toolTip="Display at most 40 articles in feed menu" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="b3d-WG-MiJ">
|
||||||
|
<rect key="frame" x="96" y="88" width="206" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Limit number of articles" id="vjz-OI-S9j">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="X7N-1T-bmw">
|
||||||
|
<rect key="frame" x="96" y="264" width="206" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Tint menu bar icon on unread" id="edV-Xi-cpf">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
</subviews>
|
</subviews>
|
||||||
<point key="canvasLocation" x="140" y="-155.5"/>
|
<point key="canvasLocation" x="404" y="-154"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -32,4 +32,5 @@
|
|||||||
|
|
||||||
+ (NSUInteger)openFewLinksLimit; // Change with: 'defaults write de.relikd.baRSS openFewLinksLimit -int 10'
|
+ (NSUInteger)openFewLinksLimit; // Change with: 'defaults write de.relikd.baRSS openFewLinksLimit -int 10'
|
||||||
+ (NSUInteger)shortArticleNamesLimit; // Change with: 'defaults write de.relikd.baRSS shortArticleNamesLimit -int 50'
|
+ (NSUInteger)shortArticleNamesLimit; // Change with: 'defaults write de.relikd.baRSS shortArticleNamesLimit -int 50'
|
||||||
|
+ (NSUInteger)articlesInMenuLimit; // Change with: 'defaults write de.relikd.baRSS articlesInMenuLimit -int 40'
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -68,13 +68,21 @@
|
|||||||
#pragma mark - Hidden Plist Properties -
|
#pragma mark - Hidden Plist Properties -
|
||||||
|
|
||||||
/// @return The limit on how many links should be opened at the same time, if user holds the option key.
|
/// @return The limit on how many links should be opened at the same time, if user holds the option key.
|
||||||
|
/// Default: @c 10
|
||||||
+ (NSUInteger)openFewLinksLimit {
|
+ (NSUInteger)openFewLinksLimit {
|
||||||
return (NSUInteger)[self defaultInt:10 forKey:@"openFewLinksLimit"];
|
return (NSUInteger)[self defaultInt:10 forKey:@"openFewLinksLimit"];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @return The limit on when to truncate article titles (Short names setting must be active).
|
/// @return The limit on when to truncate article titles (Short names setting must be active).
|
||||||
|
/// Default: @c 60
|
||||||
+ (NSUInteger)shortArticleNamesLimit {
|
+ (NSUInteger)shortArticleNamesLimit {
|
||||||
return (NSUInteger)[self defaultInt:60 forKey:@"shortArticleNamesLimit"];
|
return (NSUInteger)[self defaultInt:60 forKey:@"shortArticleNamesLimit"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @return The maximum number of articles displayed per feed (Limit articles setting must be active).
|
||||||
|
/// Default: @c 40
|
||||||
|
+ (NSUInteger)articlesInMenuLimit {
|
||||||
|
return (NSUInteger)[self defaultInt:40 forKey:@"articlesInMenuLimit"];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
@interface ModalSheet()
|
@interface ModalSheet()
|
||||||
@property (weak) NSButton *btnDone;
|
@property (weak) NSButton *btnDone;
|
||||||
|
@property (assign) BOOL respondToShouldClose;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation ModalSheet
|
@implementation ModalSheet
|
||||||
@@ -36,12 +37,20 @@
|
|||||||
/// Manually disable 'Done' button if a task is still running.
|
/// Manually disable 'Done' button if a task is still running.
|
||||||
- (void)setDoneEnabled:(BOOL)accept { self.btnDone.enabled = accept; }
|
- (void)setDoneEnabled:(BOOL)accept { self.btnDone.enabled = accept; }
|
||||||
|
|
||||||
|
- (void)setDelegate:(id<NSWindowDelegate>)delegate {
|
||||||
|
[super setDelegate:delegate];
|
||||||
|
self.respondToShouldClose = [delegate respondsToSelector:@selector(windowShouldClose:)];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Called after user has clicked the 'Done' (Return) or 'Cancel' (Esc) button.
|
Called after user has clicked the 'Done' (Return) or 'Cancel' (Esc) button.
|
||||||
Flags controller as being closed @c .closeInitiated @c = @c YES.
|
Flags controller as being closed @c .closeInitiated @c = @c YES.
|
||||||
And removes all subviews (clean up).
|
And removes all subviews (clean up).
|
||||||
*/
|
*/
|
||||||
- (void)closeWithResponse:(NSModalResponse)response {
|
- (void)closeWithResponse:(NSModalResponse)response {
|
||||||
|
if (response == NSModalResponseOK && self.respondToShouldClose && ![self.delegate windowShouldClose:self]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
_didCloseAndSave = (response == NSModalResponseOK);
|
_didCloseAndSave = (response == NSModalResponseOK);
|
||||||
_didCloseAndCancel = (response != NSModalResponseOK);
|
_didCloseAndCancel = (response != NSModalResponseOK);
|
||||||
// store modal view width and remove subviews to avoid _NSKeyboardFocusClipView issues
|
// store modal view width and remove subviews to avoid _NSKeyboardFocusClipView issues
|
||||||
|
|||||||
@@ -51,6 +51,13 @@
|
|||||||
self.window.contentView = self.settingsGeneral.view;
|
self.window.contentView = self.settingsGeneral.view;
|
||||||
} else if ([sender.itemIdentifier isEqualToString:@"tabFeeds"]) {
|
} else if ([sender.itemIdentifier isEqualToString:@"tabFeeds"]) {
|
||||||
self.window.contentView = self.settingsFeeds.view;
|
self.window.contentView = self.settingsFeeds.view;
|
||||||
|
} else if ([sender.itemIdentifier isEqualToString:@"tabAppearance"]) {
|
||||||
|
if (self.settingsGeneral.view.frame.size.width > 0) {
|
||||||
|
// using side effect when reading settingsGeneral.view -> will load appearanceView too.
|
||||||
|
// TODO: generate view programmatically
|
||||||
|
self.window.contentView = nil;
|
||||||
|
}
|
||||||
|
self.window.contentView = self.settingsGeneral.appearanceView;
|
||||||
} else if ([sender.itemIdentifier isEqualToString:@"tabAbout"]) {
|
} else if ([sender.itemIdentifier isEqualToString:@"tabAbout"]) {
|
||||||
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
|
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
|
||||||
self.lblAppName.objectValue = infoDict[@"CFBundleName"];
|
self.lblAppName.objectValue = infoDict[@"CFBundleName"];
|
||||||
|
|||||||
@@ -38,6 +38,11 @@
|
|||||||
<action selector="tabClicked:" target="-2" id="MVF-hq-6H4"/>
|
<action selector="tabClicked:" target="-2" id="MVF-hq-6H4"/>
|
||||||
</connections>
|
</connections>
|
||||||
</toolbarItem>
|
</toolbarItem>
|
||||||
|
<toolbarItem implicitItemIdentifier="BC213BA1-C1C5-4EBA-8282-769344192482" explicitItemIdentifier="tabAppearance" label="Appearance" paletteLabel="Appearance" tag="-1" image="NSFontPanel" selectable="YES" id="5gP-ck-qVK">
|
||||||
|
<connections>
|
||||||
|
<action selector="tabClicked:" target="-2" id="BXs-NU-zQM"/>
|
||||||
|
</connections>
|
||||||
|
</toolbarItem>
|
||||||
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="kda-e8-akS"/>
|
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="kda-e8-akS"/>
|
||||||
<toolbarItem implicitItemIdentifier="7A0CF54C-C0BA-4E1D-9CD7-39FD39A6BA5A" explicitItemIdentifier="tabAbout" label="About" paletteLabel="About" tag="-1" image="NSInfo" selectable="YES" id="kob-4t-J64">
|
<toolbarItem implicitItemIdentifier="7A0CF54C-C0BA-4E1D-9CD7-39FD39A6BA5A" explicitItemIdentifier="tabAbout" label="About" paletteLabel="About" tag="-1" image="NSInfo" selectable="YES" id="kob-4t-J64">
|
||||||
<connections>
|
<connections>
|
||||||
@@ -48,6 +53,7 @@
|
|||||||
<defaultToolbarItems>
|
<defaultToolbarItems>
|
||||||
<toolbarItem reference="WDq-RJ-C3X"/>
|
<toolbarItem reference="WDq-RJ-C3X"/>
|
||||||
<toolbarItem reference="atT-AS-vmR"/>
|
<toolbarItem reference="atT-AS-vmR"/>
|
||||||
|
<toolbarItem reference="5gP-ck-qVK"/>
|
||||||
<toolbarItem reference="kda-e8-akS"/>
|
<toolbarItem reference="kda-e8-akS"/>
|
||||||
<toolbarItem reference="kob-4t-J64"/>
|
<toolbarItem reference="kob-4t-J64"/>
|
||||||
</defaultToolbarItems>
|
</defaultToolbarItems>
|
||||||
@@ -769,6 +775,7 @@ Cg
|
|||||||
</objects>
|
</objects>
|
||||||
<resources>
|
<resources>
|
||||||
<image name="NSApplicationIcon" width="128" height="128"/>
|
<image name="NSApplicationIcon" width="128" height="128"/>
|
||||||
|
<image name="NSFontPanel" width="32" height="32"/>
|
||||||
<image name="NSInfo" width="32" height="32"/>
|
<image name="NSInfo" width="32" height="32"/>
|
||||||
<image name="NSPreferencesGeneral" width="32" height="32"/>
|
<image name="NSPreferencesGeneral" width="32" height="32"/>
|
||||||
<image name="NSUserAccounts" width="32" height="32"/>
|
<image name="NSUserAccounts" width="32" height="32"/>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#import "BarMenu.h"
|
#import "BarMenu.h"
|
||||||
#import "Constants.h"
|
#import "Constants.h"
|
||||||
|
#import "UserPrefs.h"
|
||||||
#import "NSMenu+Ext.h"
|
#import "NSMenu+Ext.h"
|
||||||
#import "BarStatusItem.h"
|
#import "BarStatusItem.h"
|
||||||
#import "MapUnreadTotal.h"
|
#import "MapUnreadTotal.h"
|
||||||
@@ -105,8 +106,14 @@
|
|||||||
/// Generate items for @c FeedArticles menu.
|
/// Generate items for @c FeedArticles menu.
|
||||||
- (void)setArticles:(NSArray<FeedArticle*>*)sortedList forMenu:(NSMenu*)menu {
|
- (void)setArticles:(NSArray<FeedArticle*>*)sortedList forMenu:(NSMenu*)menu {
|
||||||
[menu insertDefaultHeader];
|
[menu insertDefaultHeader];
|
||||||
|
NSUInteger mc = 0;
|
||||||
|
if ([UserPrefs defaultNO:@"feedLimitArticles"]) {
|
||||||
|
mc = [UserPrefs articlesInMenuLimit];
|
||||||
|
}
|
||||||
for (FeedArticle *fa in sortedList) {
|
for (FeedArticle *fa in sortedList) {
|
||||||
[menu addItem:[fa newMenuItem]];
|
[menu addItem:[fa newMenuItem]];
|
||||||
|
if (--mc == 0) // if mc==0 then unsigned int will underflow and turn into INT_MAX
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
UnreadTotal *uct = self.unreadMap[menu.titleIndexPath];
|
UnreadTotal *uct = self.unreadMap[menu.titleIndexPath];
|
||||||
[menu setHeaderHasUnread:(uct.unread > 0) hasRead:(uct.unread < uct.total)];
|
[menu setHeaderHasUnread:(uct.unread > 0) hasRead:(uct.unread < uct.total)];
|
||||||
|
|||||||
Reference in New Issue
Block a user