aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPRuleFilterController.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/SPRuleFilterController.h')
-rw-r--r--Source/SPRuleFilterController.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/Source/SPRuleFilterController.h b/Source/SPRuleFilterController.h
new file mode 100644
index 00000000..45c28fce
--- /dev/null
+++ b/Source/SPRuleFilterController.h
@@ -0,0 +1,163 @@
+//
+// 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;
+
+ NSMutableArray *columns;
+ NSMutableDictionary *contentFilters;
+ NSMutableDictionary *numberOfDefaultFilters;
+
+ NSMutableArray *model;
+
+ SPContentFilterManager *contentFilterManager;
+
+ CGFloat preferredHeight;
+
+ id target;
+ SEL action;
+
+ BOOL enabled;
+}
+
+/**
+ * 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