Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51e1f07531 | ||
|
|
b21cc20746 | ||
|
|
be600b6c5f | ||
|
|
a9c3ccc1f7 | ||
|
|
c4c5559d2d | ||
|
|
68b25d10dd | ||
|
|
24c785662a | ||
|
|
2a589f51a8 | ||
|
|
30527d50e6 |
14
CHANGELOG.md
14
CHANGELOG.md
@@ -8,6 +8,16 @@ and this project does adhere to [Semantic Versioning](https://semver.org/spec/v2
|
||||
## [Unreleased]
|
||||
|
||||
|
||||
## [1.2.1] – 2023-06-17
|
||||
### Added
|
||||
- Universal binary (Intel+AppleSilicon)
|
||||
|
||||
### Fixed
|
||||
- Autoresize issues of UI elements in macOS Ventura
|
||||
- Flexible width TabBarItem
|
||||
- Updated About page (removed dead link)
|
||||
|
||||
|
||||
## [1.2.0] – 2022-10-01
|
||||
### Added
|
||||
- *UI*: Add option to hide read articles (show only unread)
|
||||
@@ -158,7 +168,9 @@ and this project does adhere to [Semantic Versioning](https://semver.org/spec/v2
|
||||
Initial release
|
||||
|
||||
|
||||
[Unreleased]: https://github.com/relikd/baRSS/compare/v1.1.3...HEAD
|
||||
[Unreleased]: https://github.com/relikd/baRSS/compare/v1.2.1...HEAD
|
||||
[1.2.1]: https://github.com/relikd/baRSS/compare/v1.2.0...v1.2.1
|
||||
[1.2.0]: https://github.com/relikd/baRSS/compare/v1.1.3...v1.2.0
|
||||
[1.1.3]: https://github.com/relikd/baRSS/compare/v1.1.2...v1.1.3
|
||||
[1.1.2]: https://github.com/relikd/baRSS/compare/v1.1.1...v1.1.2
|
||||
[1.1.1]: https://github.com/relikd/baRSS/compare/v1.1.0...v1.1.1
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
github "relikd/RSXML2" "v2.0.1"
|
||||
18
README.md
18
README.md
@@ -42,18 +42,20 @@ Go to [releases](https://github.com/relikd/baRSS/releases) and downloaded the la
|
||||
Searching for the App Store release? Read this [notice](#app-store-notice).
|
||||
|
||||
### Build from source
|
||||
You'll need Xcode and [Carthage](https://github.com/Carthage/Carthage#installing-carthage).
|
||||
The latter is optional, you can build the [RSXML2] 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`.
|
||||
You'll need Xcode, [RSXML2] \(required), and [QLOPML] \(optional).
|
||||
|
||||
```sh
|
||||
git clone https://github.com/relikd/baRSS
|
||||
git clone https://github.com/relikd/RSXML2
|
||||
git clone https://github.com/relikd/QLOPML
|
||||
```
|
||||
|
||||
Next, you need to clone [QLOPML](https://github.com/relikd/QLOPML) in the same folder where this project is.
|
||||
Alternatively, you can simply delete the `QLOPML` project reference without much harm.
|
||||
`QLOPML` is a Quick Look plugin for `.opml` files.
|
||||
It will display the file contents whenever you hit spacebar.
|
||||
|
||||
That's it.
|
||||
Open Xcode and build the project.
|
||||
Open `baRSS/baRSS.xcodeproj` 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`.
|
||||
|
||||
@@ -165,7 +167,7 @@ But on the other hand, now it is macOS 10.12 compatible.
|
||||
|
||||
### 3rd Party Libraries
|
||||
|
||||
This project uses a modified version of Brent Simmons' [RSXML](https://github.com/brentsimmons/RSXML) for feed parsing.
|
||||
This project uses a modified version of Brent Simmons' [RSXML] for feed parsing.
|
||||
[RSXML2] is licensed under a MIT license (same as this project).
|
||||
|
||||
|
||||
@@ -176,4 +178,6 @@ This project uses a modified version of Brent Simmons' [RSXML](https://github.co
|
||||
- First prototype used __feedparser python__ library
|
||||
|
||||
|
||||
[QLOPML]: https://github.com/relikd/QLOPML
|
||||
[RSXML2]: https://github.com/relikd/RSXML2
|
||||
[RSXML]: https://github.com/brentsimmons/RSXML
|
||||
|
||||
@@ -14,9 +14,6 @@
|
||||
54209E942117325100F3B5EF /* DrawImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 54209E932117325100F3B5EF /* DrawImage.m */; };
|
||||
544B011A2114B41200386E5C /* ModalSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 544B01192114B41200386E5C /* ModalSheet.m */; };
|
||||
544B011D2114EE9100386E5C /* AppHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 544B011C2114EE9100386E5C /* AppHook.m */; };
|
||||
544DCCB9212A2B4D002DBC46 /* RSXML2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 544DCCB8212A2B4D002DBC46 /* RSXML2.framework */; };
|
||||
544DCCBA212A2B4D002DBC46 /* RSXML2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 544DCCB8212A2B4D002DBC46 /* RSXML2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
544DCCBE212A2B6F002DBC46 /* RSXML2.framework.dSYM in CopyFiles */ = {isa = PBXBuildFile; fileRef = 544DCCBD212A2B6F002DBC46 /* RSXML2.framework.dSYM */; };
|
||||
54501010230E9C8600F0B165 /* FeedDownload.m in Sources */ = {isa = PBXBuildFile; fileRef = 5450100F230E9C8600F0B165 /* FeedDownload.m */; };
|
||||
546A6A2922C583390034E806 /* SettingsGeneralView.m in Sources */ = {isa = PBXBuildFile; fileRef = 54D857D122802309001BA1C8 /* SettingsGeneralView.m */; };
|
||||
546A6A2C22C584AF0034E806 /* SettingsAppearanceView.m in Sources */ = {isa = PBXBuildFile; fileRef = 546A6A2A22C584AF0034E806 /* SettingsAppearanceView.m */; };
|
||||
@@ -25,6 +22,8 @@
|
||||
546FC44321189975007CC3A3 /* SettingsGeneral.m in Sources */ = {isa = PBXBuildFile; fileRef = 546FC44121189975007CC3A3 /* SettingsGeneral.m */; };
|
||||
5477D34E21233C62002BA27F /* FeedGroup+Ext.m in Sources */ = {isa = PBXBuildFile; fileRef = 5477D34D21233C62002BA27F /* FeedGroup+Ext.m */; };
|
||||
5478DF04225A7AE200D30C64 /* SettingsFeedsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5478DF03225A7AE200D30C64 /* SettingsFeedsView.m */; };
|
||||
5483296C2A3CDC38000688B9 /* RSXML2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 548329652A3CDB22000688B9 /* RSXML2.framework */; };
|
||||
5483296D2A3CDC38000688B9 /* RSXML2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 548329652A3CDB22000688B9 /* RSXML2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
548C6D0A230C33DE003A1AAF /* NSURL+Ext.m in Sources */ = {isa = PBXBuildFile; fileRef = 548C6D09230C33DE003A1AAF /* NSURL+Ext.m */; };
|
||||
5491005D2331435E00858AE2 /* Download3rdParty.m in Sources */ = {isa = PBXBuildFile; fileRef = 5491005C2331435E00858AE2 /* Download3rdParty.m */; };
|
||||
54910067233A4D4000858AE2 /* URLScheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 54910066233A4D4000858AE2 /* URLScheme.m */; };
|
||||
@@ -59,6 +58,20 @@
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
548329642A3CDB22000688B9 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 5483295E2A3CDB22000688B9 /* RSXML2.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 84F22C0D1B52DDEA000060CE;
|
||||
remoteInfo = RSXML2;
|
||||
};
|
||||
548329662A3CDB22000688B9 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 5483295E2A3CDB22000688B9 /* RSXML2.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 84F22C171B52DDEA000060CE;
|
||||
remoteInfo = RSXML2Tests;
|
||||
};
|
||||
54A2D63722EF8193007C61F3 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 54A2D62E22EF8183007C61F3 /* QLOPML.xcodeproj */;
|
||||
@@ -75,7 +88,7 @@
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
544DCCBA212A2B4D002DBC46 /* RSXML2.framework in Embed Frameworks */,
|
||||
5483296D2A3CDC38000688B9 /* RSXML2.framework in Embed Frameworks */,
|
||||
);
|
||||
name = "Embed Frameworks";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -86,7 +99,6 @@
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 16;
|
||||
files = (
|
||||
544DCCBE212A2B6F002DBC46 /* RSXML2.framework.dSYM in CopyFiles */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -119,8 +131,6 @@
|
||||
544B01192114B41200386E5C /* ModalSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModalSheet.m; sourceTree = "<group>"; };
|
||||
544B011B2114EE9100386E5C /* AppHook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppHook.h; sourceTree = "<group>"; };
|
||||
544B011C2114EE9100386E5C /* AppHook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppHook.m; sourceTree = "<group>"; };
|
||||
544DCCB8212A2B4D002DBC46 /* RSXML2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RSXML2.framework; path = Carthage/Build/Mac/RSXML2.framework; sourceTree = "<group>"; };
|
||||
544DCCBD212A2B6F002DBC46 /* RSXML2.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; name = RSXML2.framework.dSYM; path = Carthage/Build/Mac/RSXML2.framework.dSYM; sourceTree = "<group>"; };
|
||||
5450100E230E9C8600F0B165 /* FeedDownload.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FeedDownload.h; sourceTree = "<group>"; };
|
||||
5450100F230E9C8600F0B165 /* FeedDownload.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FeedDownload.m; sourceTree = "<group>"; };
|
||||
546A6A2A22C584AF0034E806 /* SettingsAppearanceView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsAppearanceView.m; sourceTree = "<group>"; };
|
||||
@@ -135,6 +145,7 @@
|
||||
5477D34D21233C62002BA27F /* FeedGroup+Ext.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "FeedGroup+Ext.m"; sourceTree = "<group>"; };
|
||||
5478DF02225A7AE200D30C64 /* SettingsFeedsView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsFeedsView.h; sourceTree = "<group>"; };
|
||||
5478DF03225A7AE200D30C64 /* SettingsFeedsView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SettingsFeedsView.m; sourceTree = "<group>"; };
|
||||
5483295E2A3CDB22000688B9 /* RSXML2.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RSXML2.xcodeproj; path = ../RSXML2/RSXML2.xcodeproj; sourceTree = "<group>"; };
|
||||
54892F1D2235285700271CBA /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = "<group>"; };
|
||||
548C6D08230C33DE003A1AAF /* NSURL+Ext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSURL+Ext.h"; sourceTree = "<group>"; };
|
||||
548C6D09230C33DE003A1AAF /* NSURL+Ext.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSURL+Ext.m"; sourceTree = "<group>"; };
|
||||
@@ -204,7 +215,7 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
544DCCB9212A2B4D002DBC46 /* RSXML2.framework in Frameworks */,
|
||||
5483296C2A3CDC38000688B9 /* RSXML2.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -247,15 +258,6 @@
|
||||
path = NSCategories;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
544FBD4321064AEB008A260C /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
544DCCB8212A2B4D002DBC46 /* RSXML2.framework */,
|
||||
544DCCBD212A2B6F002DBC46 /* RSXML2.framework.dSYM */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
546FC44D2118B357007CC3A3 /* Preferences */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -271,6 +273,15 @@
|
||||
path = Preferences;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5483295F2A3CDB22000688B9 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
548329652A3CDB22000688B9 /* RSXML2.framework */,
|
||||
548329672A3CDB22000688B9 /* RSXML2Tests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
54A07A8322105E0800082C51 /* Core Data */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -305,8 +316,8 @@
|
||||
54892F1D2235285700271CBA /* CHANGELOG.md */,
|
||||
54ACC27E21061B3B0020715F /* baRSS */,
|
||||
54A2D62E22EF8183007C61F3 /* QLOPML.xcodeproj */,
|
||||
5483295E2A3CDB22000688B9 /* RSXML2.xcodeproj */,
|
||||
54ACC27D21061B3B0020715F /* Products */,
|
||||
544FBD4321064AEB008A260C /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
@@ -498,6 +509,10 @@
|
||||
ProductGroup = 54A2D63422EF8193007C61F3 /* Products */;
|
||||
ProjectRef = 54A2D62E22EF8183007C61F3 /* QLOPML.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 5483295F2A3CDB22000688B9 /* Products */;
|
||||
ProjectRef = 5483295E2A3CDB22000688B9 /* RSXML2.xcodeproj */;
|
||||
},
|
||||
);
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
@@ -507,6 +522,20 @@
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXReferenceProxy section */
|
||||
548329652A3CDB22000688B9 /* RSXML2.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = RSXML2.framework;
|
||||
remoteRef = 548329642A3CDB22000688B9 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
548329672A3CDB22000688B9 /* RSXML2Tests.xctest */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.cfbundle;
|
||||
path = RSXML2Tests.xctest;
|
||||
remoteRef = 548329662A3CDB22000688B9 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
54A2D63822EF8193007C61F3 /* QLOPML.qlgenerator */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.cfbundle;
|
||||
@@ -754,7 +783,6 @@
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)",
|
||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
||||
);
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"APP_NAME=\"\\@\\\"$(PRODUCT_NAME)\\\"\"",
|
||||
@@ -809,7 +837,6 @@
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)",
|
||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
||||
);
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"APP_NAME=\"\\@\\\"$(PRODUCT_NAME)\\\"\"",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1200"
|
||||
LastUpgradeVersion = "1240"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.2.0</string>
|
||||
<string>1.2.1</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
@@ -70,7 +70,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>14698</string>
|
||||
<string>14835</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.news</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
@implementation SettingsAboutView
|
||||
|
||||
- (instancetype)init {
|
||||
self = [super initWithFrame: NSZeroRect];
|
||||
self = [super initWithFrame:NSMakeRect(0, 0, 320, 327)];
|
||||
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
|
||||
NSString *version = [NSString stringWithFormat:NSLocalizedString(@"Version %@", nil), info[@"CFBundleShortVersionString"]];
|
||||
#if DEBUG // append build number, e.g., '0.9.4 (9906)'
|
||||
@@ -33,16 +33,16 @@
|
||||
NSMutableAttributedString *mas = [NSMutableAttributedString new];
|
||||
[mas beginEditing];
|
||||
[self str:mas add:@"Programming\n" bold:YES];
|
||||
[self str:mas add:@"Oleg Geier\n\n" bold:NO];
|
||||
[self str:mas add:@"Source Code Available\n" bold:YES];
|
||||
[self str:mas add:@"Oleg Geier\n" bold:NO];
|
||||
[self str:mas add:@"\nSource Code Available\n" bold:YES];
|
||||
[self str:mas add:@"github.com" link:@"https://github.com/relikd/baRSS"];
|
||||
[self str:mas add:@" (MIT License)\nor " bold:NO];
|
||||
[self str:mas add:@"gitlab.com" link:@"https://gitlab.com/relikd/baRSS"];
|
||||
[self str:mas add:@" (MIT License)\n\n" bold:NO];
|
||||
[self str:mas add:@"3rd-Party Libraries\n" bold:YES];
|
||||
[self str:mas add:@" (MIT License)\n" bold:NO];
|
||||
[self str:mas add:@"\nLibraries\n" bold:YES];
|
||||
[self str:mas add:@"RSXML2" link:@"https://github.com/relikd/RSXML2"];
|
||||
[self str:mas add:@" (MIT License)" bold:NO];
|
||||
[self str:mas add:@"\n\n\n\nOptions\n" bold:YES];
|
||||
[self str:mas add:@" (MIT License)\n" bold:NO];
|
||||
[self str:mas add:@"QLOPML" link:@"https://github.com/relikd/QLOPML"];
|
||||
[self str:mas add:@" (MIT License)\n" bold:NO];
|
||||
[self str:mas add:@"\n\n\nOptions\n" bold:YES];
|
||||
[self str:mas add:@"Fix Cache\n" link:@"barss:config/fixcache"];
|
||||
[self str:mas add:@"Backup now\n" link:@"barss:backup/show"];
|
||||
[mas endEditing];
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
@implementation SettingsAppearanceView
|
||||
|
||||
- (instancetype)init {
|
||||
self = [super initWithFrame: NSZeroRect];
|
||||
self = [super initWithFrame:NSMakeRect(0, 0, 320, 327)];
|
||||
// Insert matrix header (icons above checkbox matrix)
|
||||
ColumnIcon(self, X__, RSSImageSettingsGlobal, NSLocalizedString(@"Show in menu bar", nil));
|
||||
ColumnIcon(self, _X_, RSSImageSettingsGroup, NSLocalizedString(@"Show in group menu", nil));
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
NSView *labels = [NSView labelColumn:lbls rowHeight:HEIGHT_INPUTFIELD padding:PAD_S];
|
||||
|
||||
|
||||
self = [super initWithFrame:NSMakeRect(0, 0, 0, NSHeight(labels.frame))];
|
||||
self = [super initWithFrame:NSMakeRect(0, 0, 320, NSHeight(labels.frame))];
|
||||
self.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
|
||||
|
||||
CGFloat x = NSWidth(labels.frame) + PAD_S;
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
@return Centered view without autoresizing.
|
||||
*/
|
||||
- (instancetype)initWithRefreshInterval:(NSDictionary*)info articleCount:(NSUInteger)count callback:(nullable id<RefreshIntervalButtonDelegate>)callback {
|
||||
self = [super initWithFrame:NSZeroRect];
|
||||
self = [super initWithFrame:NSMakeRect(0, 0, 320, 327)];
|
||||
self.autoresizesSubviews = NO;
|
||||
|
||||
NSTextField *dateView = [self viewForArticlesCount:count latest:info];
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
@implementation SettingsFeedsView
|
||||
|
||||
- (instancetype)initWithController:(SettingsFeeds*)delegate {
|
||||
self = [super initWithFrame:NSZeroRect];
|
||||
self = [super initWithFrame:NSMakeRect(0, 0, 201, 327)];
|
||||
if (self) {
|
||||
self.controller = delegate; // make sure its first
|
||||
self.outline = [self generateOutlineView]; // uses self.controller
|
||||
@@ -60,7 +60,7 @@
|
||||
- (void)setOutlineColumns:(NSOutlineView*)outline {
|
||||
NSTableColumn *colName = [[NSTableColumn alloc] initWithIdentifier:CustomCellName];
|
||||
colName.title = NSLocalizedString(@"Name", nil);
|
||||
colName.width = 10000;
|
||||
colName.width = 201;
|
||||
colName.maxWidth = 10000;
|
||||
colName.resizingMask = NSTableColumnAutoresizingMask;
|
||||
[outline addTableColumn:colName];
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
@implementation SettingsGeneralView
|
||||
|
||||
- (instancetype)initWithController:(SettingsGeneral*)controller {
|
||||
self = [super initWithFrame:NSZeroRect];
|
||||
self = [super initWithFrame:NSMakeRect(0, 0, 320, 327)];
|
||||
// Change default feed reader application
|
||||
NSTextField *l1 = [[NSView label:NSLocalizedString(@"Default feed reader:", nil)] placeIn:self x:PAD_WIN yTop:PAD_WIN + 3];
|
||||
NSButton *help = [[[NSView helpButton] action:@selector(clickHowToDefaults:) target:controller] placeIn:self xRight:PAD_WIN yTop:PAD_WIN];
|
||||
|
||||
@@ -16,18 +16,13 @@
|
||||
if (self) {
|
||||
self.tabStyle = NSTabViewControllerTabStyleToolbar;
|
||||
self.transitionOptions = NSViewControllerTransitionNone;
|
||||
|
||||
NSTabViewItem *flexibleWidth = [[NSTabViewItem alloc] initWithIdentifier:NSToolbarFlexibleSpaceItemIdentifier];
|
||||
flexibleWidth.viewController = [NSViewController new];
|
||||
|
||||
self.tabViewItems = @[
|
||||
TabItem(NSImageNamePreferencesGeneral, NSLocalizedString(@"General", nil), [SettingsGeneral class]),
|
||||
TabItem(NSImageNameUserAccounts, NSLocalizedString(@"Feeds", nil), [SettingsFeeds class]),
|
||||
TabItem(NSImageNameFontPanel, NSLocalizedString(@"Appearance", nil), [SettingsAppearance class]),
|
||||
flexibleWidth,
|
||||
TabItem(NSImageNameInfo, NSLocalizedString(@"About", nil), [SettingsAbout class]),
|
||||
];
|
||||
[self switchToTab: UserPrefsUInt(Pref_prefSelectedTab)];
|
||||
self.selectedTabViewItemIndex = -1;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -43,19 +38,16 @@ static inline NSTabViewItem* TabItem(NSImageName imageName, NSString *text, Clas
|
||||
/// Safely set selected index without out of bounds exception
|
||||
- (__kindof NSViewController*)switchToTab:(NSUInteger)index {
|
||||
if (index < 0 || index >= self.tabViewItems.count)
|
||||
return nil;
|
||||
NSTabViewItem *tab = self.tabViewItems[index];
|
||||
if (tab.identifier == NSToolbarFlexibleSpaceItemIdentifier)
|
||||
return nil;
|
||||
index = 0;
|
||||
self.selectedTabViewItemIndex = (NSInteger)index;
|
||||
return [tab viewController];
|
||||
return [self.tabViewItems[index] viewController];
|
||||
}
|
||||
|
||||
/// Delegate method, store last selected tab to user preferences
|
||||
- (void)tabView:(NSTabView*)tabView didSelectTabViewItem:(nullable NSTabViewItem*)tabViewItem {
|
||||
[super tabView:tabView didSelectTabViewItem:tabViewItem];
|
||||
NSInteger newIndex = self.selectedTabViewItemIndex;
|
||||
if (UserPrefsInt(Pref_prefSelectedTab) != newIndex)
|
||||
if (newIndex != -1 && UserPrefsInt(Pref_prefSelectedTab) != newIndex)
|
||||
UserPrefsSetInt(Pref_prefSelectedTab, newIndex);
|
||||
}
|
||||
|
||||
@@ -70,7 +62,10 @@ static inline NSTabViewItem* TabItem(NSImageName imageName, NSString *text, Clas
|
||||
w.contentMinSize = NSMakeSize(320, 327);
|
||||
w.windowController.shouldCascadeWindows = YES;
|
||||
w.title = [NSString stringWithFormat:NSLocalizedString(@"%@ Preferences", nil), NSProcessInfo.processInfo.processName];
|
||||
w.contentViewController = [PrefTabs new];
|
||||
PrefTabs *tabController = [PrefTabs new];
|
||||
w.contentViewController = tabController;
|
||||
[w.toolbar insertItemWithItemIdentifier:NSToolbarSpaceItemIdentifier atIndex:3];
|
||||
[w.toolbar insertItemWithItemIdentifier:NSToolbarFlexibleSpaceItemIdentifier atIndex:4];
|
||||
w.delegate = w;
|
||||
NSWindowPersistableFrameDescriptor prevFrame = UserPrefsString(Pref_prefWindowFrame);
|
||||
if (!prevFrame) {
|
||||
@@ -79,6 +74,7 @@ static inline NSTabViewItem* TabItem(NSImageName imageName, NSString *text, Clas
|
||||
} else {
|
||||
[w setFrameFromString:prevFrame];
|
||||
}
|
||||
[tabController switchToTab:UserPrefsUInt(Pref_prefSelectedTab)];
|
||||
return w;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user