Skip to content

Commit 3a39095

Browse files
committed
Merge branch 'release/2.1.0'
2 parents 5615937 + 753ab7d commit 3a39095

17 files changed

+1495
-1038
lines changed

TodoTxtMac/Base.lproj/MainMenu.xib

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,19 @@ CA
547547
<action selector="openWebSite:" target="7QU-ZR-XSK" id="9Ag-Y1-CGm"/>
548548
</connections>
549549
</menuItem>
550+
<menuItem isSeparatorItem="YES" id="lRU-6h-IH1"/>
551+
<menuItem title="Plaintext Productivity Web Site" id="9hp-z8-KLG">
552+
<modifierMask key="keyEquivalentModifierMask"/>
553+
<connections>
554+
<action selector="openPlaintextProductivityWebSite:" target="7QU-ZR-XSK" id="ECP-z5-0Cu"/>
555+
</connections>
556+
</menuItem>
557+
<menuItem title="Todo.txt Tips from Plaintext Productivity" id="MgF-xZ-I3A">
558+
<modifierMask key="keyEquivalentModifierMask"/>
559+
<connections>
560+
<action selector="openTodoTxtTipsPlaintextProductivityWebSite:" target="7QU-ZR-XSK" id="tYj-xu-zQ4"/>
561+
</connections>
562+
</menuItem>
550563
</items>
551564
</menu>
552565
</menuItem>

TodoTxtMac/TTMAppController.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ extern NSString *const TodoFileArgument;
5959
- (IBAction)openPreferencesWindow:(id)sender;
6060
- (IBAction)openFiltersWindow:(id)sender;
6161
- (IBAction)openWebSite:(id)sender;
62+
- (IBAction)openPlaintextProductivityWebSite:(id)sender;
63+
- (IBAction)openTodoTxtTipsPlaintextProductivityWebSite:(id)sender;
6264

6365
#pragma mark - User Defaults-related Methods
6466

TodoTxtMac/TTMAppController.m

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
[TTMDocumentStatusBarText defaultFormat], @"statusBarFormat",
104104
@0, @"levelsOfUndo",
105105
@YES, @"allowUndoOfArchiveCommand",
106+
@NO, @"hideFutureTasks",
106107
nil];
107108
}
108109
return dict;
@@ -150,11 +151,24 @@ - (IBAction)openFiltersWindow:(id)sender {
150151
[self.filtersController showWindow:self];
151152
}
152153

154+
- (void)launchURLFromString:(NSString*)urlString {
155+
NSURL *url = [NSURL URLWithString:urlString];
156+
[[NSWorkspace sharedWorkspace] openURL:url];
157+
}
158+
153159
- (IBAction)openWebSite:(id)sender {
154-
NSURL *helpURL = [NSURL URLWithString:@"http://mjdescy.github.io/TodoTxtMac/"];
155-
[[NSWorkspace sharedWorkspace] openURL:helpURL];
160+
[self launchURLFromString:@"http://mjdescy.github.io/TodoTxtMac/"];
161+
}
162+
163+
- (IBAction)openPlaintextProductivityWebSite:(id)sender {
164+
[self launchURLFromString:@"http://plaintext-productivity.net"];
156165
}
157166

167+
- (IBAction)openTodoTxtTipsPlaintextProductivityWebSite:(id)sender {
168+
[self launchURLFromString:@"http://plaintext-productivity.net/1-00-tasks-introduction.html"];
169+
}
170+
171+
158172
#pragma mark - User Defaults-related Methods
159173

160174
- (void)initializeUserDefaults:(id)sender {

TodoTxtMac/TTMDocument.m

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,11 @@ - (void)addTasksFromArray:(NSArray*)rawTextStrings
378378
[[self.undoManager prepareWithInvocationTarget:self] removeTasks:newTasks];
379379
}
380380

381-
[self updateTaskListMetadata];
381+
if (removeAllTasksFirst) {
382+
[self visualRefreshOnly:self];
383+
} else {
384+
[self updateTaskListMetadata];
385+
}
382386
}
383387

384388
- (IBAction)addNewTask:(id)sender {
@@ -476,6 +480,7 @@ - (void)refreshTaskListWithSave:(BOOL)saveToFile {
476480

477481
- (IBAction)visualRefreshOnly:(id)sender {
478482
[self setTaskListFont];
483+
[self reapplyActiveFilterPredicate];
479484
[self.tableView reloadData];
480485
[self updateTaskListMetadata];
481486
}
@@ -1299,7 +1304,7 @@ - (IBAction)showTasklistMetadata:(id)sender {
12991304
}
13001305

13011306
- (IBAction)hideTasklistMetadata:(id)sender {
1302-
[NSApp endSheet:self.tasklistMetadataSheet];
1307+
[self.windowForSheet endSheet:self.tasklistMetadataSheet];
13031308
[self.tasklistMetadataSheet close];
13041309
self.tasklistMetadataSheet = nil;
13051310
}

TodoTxtMac/TTMDocumentStatusBarText.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ extern NSString* const TTMActiveFilterNumber;
7474
extern NSString* const TTMActiveSortNumber;
7575
extern NSString* const TTMActiveSortName;
7676
extern NSString* const TTMSelectedTaskCount;
77+
extern NSString* const TTMHideFutureTasks;
7778

7879
@property (nonatomic, retain) TTMDocument *document;
7980
@property (nonatomic) NSString *format;

TodoTxtMac/TTMDocumentStatusBarText.m

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ @implementation TTMDocumentStatusBarText
7373
NSString* const TTMActiveSortNumber = @"{Sort Preset}";
7474
NSString* const TTMActiveSortName = @"{Sort Name}";
7575
NSString* const TTMSelectedTaskCount = @"{Selected}";
76+
NSString* const TTMHideFutureTasks = @"{Hide Future Tasks}";
7677

7778
#pragma mark - Init Method
7879

@@ -98,7 +99,7 @@ - (NSDictionary*)documentMetadata {
9899
@(TTMSortThresholdDate) : @"Threshold Date",
99100
@(TTMSortAlphabetical) : @"Alphabetical"
100101
};
101-
102+
102103
return @{TTMAllStatusBarAllTaskCountTag : @(self.document.tasklistMetadata.allTaskCount),
103104
TTMAllCompletedTaskCount : @(self.document.tasklistMetadata.completedTaskCount),
104105
TTMAllIncompleteTaskCount : @(self.document.tasklistMetadata.incompleteTaskCount),
@@ -120,10 +121,19 @@ - (NSDictionary*)documentMetadata {
120121
TTMActiveFilterNumber : @(self.document.activeFilterPredicateNumber),
121122
TTMActiveSortNumber : @(self.document.activeSortType),
122123
TTMActiveSortName : [sortNames objectForKey:@(self.document.activeSortType)],
123-
TTMSelectedTaskCount : @(self.document.arrayController.selectionIndexes.count)
124+
TTMSelectedTaskCount : @(self.document.arrayController.selectionIndexes.count),
125+
TTMHideFutureTasks : [self hideFutureTasks]
124126
};
125127
}
126128

129+
- (NSString*)hideFutureTasks {
130+
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"hideFutureTasks"]) {
131+
return NSLocalizedString(@"Yes", "");
132+
} else {
133+
return NSLocalizedString(@"No", "");
134+
}
135+
}
136+
127137
#pragma mark - Output/Property Methods
128138

129139
- (NSString*)statusBarText {
@@ -161,12 +171,13 @@ + (NSArray*)availableTags {
161171
TTMActiveFilterNumber,
162172
TTMActiveSortNumber,
163173
TTMActiveSortName,
164-
TTMSelectedTaskCount
174+
TTMSelectedTaskCount,
175+
TTMHideFutureTasks
165176
];
166177
}
167178

168179
+ (NSString*)defaultFormat {
169-
return @"Filter #: {Filter Preset} | Sort: {Sort Name} | Tasks: {Shown Tasks} of {All Tasks} | Incomplete: {Shown Incomplete} | Due Today: {Shown Due Today} | Overdue: {Shown Overdue}";
180+
return @"Filter #: {Filter Preset} | Sort: {Sort Name} | Tasks: {Shown Tasks} of {All Tasks} | Incomplete: {Shown Incomplete} | Due Today: {Shown Due Today} | Overdue: {Shown Overdue} | Hide Future Tasks: {Hide Future Tasks}";
170181
}
171182

172183
@end

TodoTxtMac/TTMFilterPredicates.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,19 @@
6363
*/
6464
+ (NSData*)defaultFilterPredicateData;
6565

66+
/*!
67+
* @method hideFutureTasksFilterPredicate:
68+
* @abstract This method returns a filter predicate for use with the "hide future tasks" option.
69+
*/
70+
+ (NSPredicate*)hideFutureTasksFilterPredicate;
71+
72+
/*!
73+
* @method hideFutureTasksFilterSubPredicate:
74+
* @abstract This method returns a filter predicate for use with the "hide future tasks" option.
75+
*/
76+
+ (NSPredicate*)hideFutureTasksFilterSubPredicate;
77+
78+
6679
/*!
6780
* @method noFilterPredicate:
6881
* @abstract This method returns a filter predicate for use when the filter is disabled.

TodoTxtMac/TTMFilterPredicates.m

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
*/
4646

4747
#import "TTMFilterPredicates.h"
48+
#import "TTMTask.h"
4849

4950
@implementation TTMFilterPredicates
5051

@@ -80,7 +81,27 @@ + (NSData*)defaultFilterPredicateData {
8081
}
8182

8283
+ (NSPredicate*)noFilterPredicate {
83-
return nil;
84+
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"hideFutureTasks"]) {
85+
return [self hideFutureTasksFilterPredicate];
86+
} else {
87+
return nil;
88+
}
89+
}
90+
91+
+ (NSPredicate*)hideFutureTasksFilterPredicate {
92+
static NSPredicate *defaultPredicate = nil;
93+
if (defaultPredicate == nil) {
94+
NSPredicate *defaultSubPredicate = [self hideFutureTasksFilterSubPredicate];
95+
96+
NSArray *subPredicates = @[defaultSubPredicate];
97+
defaultPredicate = [NSCompoundPredicate
98+
andPredicateWithSubpredicates:subPredicates];
99+
}
100+
return defaultPredicate;
101+
}
102+
103+
+ (NSPredicate*)hideFutureTasksFilterSubPredicate {
104+
return [NSPredicate predicateWithFormat:@"thresholdState != %d", (int)ThresholdAfterToday];
84105
}
85106

86107
#pragma mark - Set Filter Predicate Methods
@@ -110,9 +131,17 @@ + (NSPredicate*)getFilterPredicateFromPresetNumber:(NSUInteger)presetNumber {
110131
return [self noFilterPredicate];
111132
}
112133
if (presetNumber > 9) {
113-
return nil;
134+
return [self noFilterPredicate];
135+
}
136+
137+
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"hideFutureTasks"]) {
138+
NSPredicate *filterPresetSubPredicate = [self getFilterPredicateFromUserDefaultsKey:[self keyFromPresetNumber:presetNumber]];
139+
NSPredicate *hideFutureTasksSubPredicate = [self hideFutureTasksFilterSubPredicate];
140+
NSArray *subPredicates = @[filterPresetSubPredicate, hideFutureTasksSubPredicate];
141+
return [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
142+
} else {
143+
return [self getFilterPredicateFromUserDefaultsKey:[self keyFromPresetNumber:presetNumber]];
114144
}
115-
return [self getFilterPredicateFromUserDefaultsKey:[self keyFromPresetNumber:presetNumber]];
116145
}
117146

118147
+ (NSString*)keyFromPresetNumber:(NSUInteger)presetNumber {
@@ -123,7 +152,14 @@ + (NSString*)keyFromPresetNumber:(NSUInteger)presetNumber {
123152
}
124153

125154
+ (NSPredicate*)activeFilterPredicate {
126-
return [self getFilterPredicateFromUserDefaultsKey:@"activeFilterPredicate"];
155+
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"hideFutureTasks"]) {
156+
NSPredicate *filterPresetSubPredicate = [self getFilterPredicateFromUserDefaultsKey:@"activeFilterPredicate"];
157+
NSPredicate *hideFutureTasksSubPredicate = [self hideFutureTasksFilterSubPredicate];
158+
NSArray *subPredicates = @[filterPresetSubPredicate, hideFutureTasksSubPredicate];
159+
return [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
160+
} else {
161+
return [self getFilterPredicateFromUserDefaultsKey:@"activeFilterPredicate"];
162+
}
127163
}
128164

129165
+ (void)setActiveFilterPredicatePresetNumber:(NSUInteger)presetNumber {

TodoTxtMac/TTMFilters.xib

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2-
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6254" systemVersion="14B25" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
2+
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
33
<dependencies>
44
<deployment identifier="macosx"/>
5-
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6254"/>
5+
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/>
66
</dependencies>
77
<objects>
88
<customObject id="-2" userLabel="File's Owner" customClass="TTMFiltersController">
@@ -28,7 +28,7 @@
2828
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
2929
<view key="contentView" id="EiT-Mj-1SZ">
3030
<rect key="frame" x="0.0" y="0.0" width="573" height="406"/>
31-
<autoresizingMask key="autoresizingMask"/>
31+
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
3232
<subviews>
3333
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="x3A-pX-TrY">
3434
<rect key="frame" x="18" y="369" width="449" height="17"/>
@@ -524,7 +524,7 @@
524524
<autoresizingMask key="autoresizingMask"/>
525525
</scroller>
526526
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="tcy-Zc-P6i">
527-
<rect key="frame" x="477" y="1" width="15" height="245"/>
527+
<rect key="frame" x="477" y="1" width="15" height="258"/>
528528
<autoresizingMask key="autoresizingMask"/>
529529
</scroller>
530530
</scrollView>
@@ -1016,7 +1016,7 @@
10161016
<autoresizingMask key="autoresizingMask"/>
10171017
</scroller>
10181018
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="vAx-J9-pQC">
1019-
<rect key="frame" x="475" y="1" width="15" height="249"/>
1019+
<rect key="frame" x="477" y="1" width="15" height="258"/>
10201020
<autoresizingMask key="autoresizingMask"/>
10211021
</scroller>
10221022
</scrollView>
@@ -1508,7 +1508,7 @@
15081508
<autoresizingMask key="autoresizingMask"/>
15091509
</scroller>
15101510
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="ues-cY-hv0">
1511-
<rect key="frame" x="475" y="1" width="15" height="249"/>
1511+
<rect key="frame" x="477" y="1" width="15" height="258"/>
15121512
<autoresizingMask key="autoresizingMask"/>
15131513
</scroller>
15141514
</scrollView>
@@ -2000,7 +2000,7 @@
20002000
<autoresizingMask key="autoresizingMask"/>
20012001
</scroller>
20022002
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="Dn2-oy-WkD">
2003-
<rect key="frame" x="475" y="1" width="15" height="249"/>
2003+
<rect key="frame" x="477" y="1" width="15" height="258"/>
20042004
<autoresizingMask key="autoresizingMask"/>
20052005
</scroller>
20062006
</scrollView>
@@ -2492,7 +2492,7 @@
24922492
<autoresizingMask key="autoresizingMask"/>
24932493
</scroller>
24942494
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="Xch-za-6Nr">
2495-
<rect key="frame" x="475" y="1" width="15" height="249"/>
2495+
<rect key="frame" x="477" y="1" width="15" height="258"/>
24962496
<autoresizingMask key="autoresizingMask"/>
24972497
</scroller>
24982498
</scrollView>
@@ -2984,7 +2984,7 @@
29842984
<autoresizingMask key="autoresizingMask"/>
29852985
</scroller>
29862986
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="2bq-D6-2te">
2987-
<rect key="frame" x="475" y="1" width="15" height="249"/>
2987+
<rect key="frame" x="477" y="1" width="15" height="258"/>
29882988
<autoresizingMask key="autoresizingMask"/>
29892989
</scroller>
29902990
</scrollView>
@@ -3476,7 +3476,7 @@
34763476
<autoresizingMask key="autoresizingMask"/>
34773477
</scroller>
34783478
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="JkQ-8M-KaS">
3479-
<rect key="frame" x="475" y="1" width="15" height="249"/>
3479+
<rect key="frame" x="477" y="1" width="15" height="258"/>
34803480
<autoresizingMask key="autoresizingMask"/>
34813481
</scroller>
34823482
</scrollView>
@@ -3968,7 +3968,7 @@
39683968
<autoresizingMask key="autoresizingMask"/>
39693969
</scroller>
39703970
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="h5H-Ye-21u">
3971-
<rect key="frame" x="475" y="1" width="15" height="249"/>
3971+
<rect key="frame" x="477" y="1" width="15" height="258"/>
39723972
<autoresizingMask key="autoresizingMask"/>
39733973
</scroller>
39743974
</scrollView>
@@ -4460,7 +4460,7 @@
44604460
<autoresizingMask key="autoresizingMask"/>
44614461
</scroller>
44624462
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="uW2-e6-tfL">
4463-
<rect key="frame" x="475" y="1" width="15" height="249"/>
4463+
<rect key="frame" x="477" y="1" width="15" height="258"/>
44644464
<autoresizingMask key="autoresizingMask"/>
44654465
</scroller>
44664466
</scrollView>

0 commit comments

Comments
 (0)