-
Notifications
You must be signed in to change notification settings - Fork 842
/
SPRuleFilterController.h
166 lines (143 loc) · 5.12 KB
/
SPRuleFilterController.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
//
// SPRuleFilterController.h
// sequel-pro
//
// Created by Max Lohrmann on 04.05.18.
// Copyright (c) 2018 Max Lohrmann. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
// More info at <https://github.com/sequelpro/sequelpro>
@class SPTableData;
@class SPDatabaseDocument;
@class SPTablesList;
@class SPContentFilterManager;
NSString * const SPRuleFilterHeightChangedNotification;
@interface SPRuleFilterController : NSObject {
IBOutlet NSRuleEditor *filterRuleEditor;
IBOutlet SPTableData *tableDataInstance;
IBOutlet SPDatabaseDocument *tableDocumentInstance;
IBOutlet SPTablesList *tablesListInstance;
IBOutlet NSView *tableContentViewBelow;
IBOutlet NSButton *filterButton;
IBOutlet NSButton *resetButton;
NSMutableArray *columns;
NSMutableDictionary *contentFilters;
NSMutableDictionary *numberOfDefaultFilters;
id _modelContainer; // private class
SPContentFilterManager *contentFilterManager;
CGFloat preferredHeight;
id target;
SEL action;
BOOL enabled;
NSUInteger opNodeCacheVersion;
}
/**
* Returns the rule editor view that is managed by this object
*
* SHOULD be called on the UI thread, or results may be inconsistent!
*/
- (NSRuleEditor *)view;
/**
* Makes the first NSTextField found in the rule editor the first responder
*
* MUST BE CALLED ON THE UI THREAD!
*/
- (void)focusFirstInputField;
/**
* Will reconfigure the columns of the rule editor from the given array.
* Call with nil to reset the editor to its initial empty state.
* Existing rows will be removed in any case!
*
* MUST BE CALLED ON THE UI THREAD!
*/
- (void)setColumns:(NSArray *)dataColumns;
/**
* Converts the current filter expression displayed in the UI into an
* SQL string suitable for use in a WHERE clause.
*
* @param isBINARY Indicates that the filter should use the BINARY qualifier for ignoring
* collations during search.
* @param err Upon return contains and object describing why the SQL conversion failed,
* if it failed or nil, if no errors occured.
*
* MUST BE CALLED ON THE UI THREAD!
*/
- (NSString *)sqlWhereExpressionWithBinary:(BOOL)isBINARY error:(NSError **)err;
/**
* Returns the current filter configuration in a serialized form that can be exported and
* reapplied later.
*
* MUST BE CALLED ON THE UI THREAD!
*/
- (NSDictionary *)serializedFilter;
/**
* Restores the filter rule configuration from a given dictionary.
* The current column configuration must match the schema that was used when generating
* the serialized data, otherwise the invalid rules will be ignored.
*
* @param serialized A dictionary previously generated by calling -serializedFilter.
* @return A serialized filter
*
* MUST BE CALLED ON THE UI THREAD!
*/
- (void)restoreSerializedFilters:(NSDictionary *)serialized;
/**
* Create a serialized filter from a given column, operator and operand.
* This is used when navigating foreign key links between tables to create the filter for the target table.
*
* @param colName Name of the column to filter (left side operand)
* @param opName Name of the filter (operator)
* @param values The values to filter with (right side operand)
* @return A serialized filter
*
* This method is thread-safe.
*/
+ (NSDictionary *)makeSerializedFilterForColumn:(NSString *)colName operator:(NSString *)opName values:(NSArray *)values;
/**
* The view height the rule editor needs in order to not have to resort to scrollbars
*
* SHOULD be called on the UI thread, or results may be inconsistent!
*/
@property (readonly, assign, nonatomic) CGFloat preferredHeight;
/**
* Indicates whether the rule editor has no filter expressions
*
* SHOULD be called on the UI thread, or results may be inconsistent!
*/
- (BOOL)isEmpty;
/**
* Adds a new row to the rule editor
*
* MUST BE CALLED ON THE UI THREAD!
*/
- (void)addFilterExpression;
/**
* Used when the rule editor wants to trigger filtering
*
* SHOULD be called on the UI thread, or results may be inconsistent!
*/
@property (assign, nonatomic) id target;
@property (assign, nonatomic) SEL action;
- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)enabled;
@end