summaryrefslogtreecommitdiff
path: root/frontends/cocoa/SearchWindowController.m
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/cocoa/SearchWindowController.m')
-rw-r--r--frontends/cocoa/SearchWindowController.m118
1 files changed, 118 insertions, 0 deletions
diff --git a/frontends/cocoa/SearchWindowController.m b/frontends/cocoa/SearchWindowController.m
new file mode 100644
index 000000000..347fb1cb9
--- /dev/null
+++ b/frontends/cocoa/SearchWindowController.m
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#import "cocoa/SearchWindowController.h"
+#import "cocoa/BrowserViewController.h"
+
+#import "netsurf/search.h"
+#import "netsurf/browser_window.h"
+#import "desktop/search.h"
+
+static void cocoa_search_set_back(bool active, void *p);
+static void cocoa_search_set_forward(bool active, void *p);
+
+static struct gui_search_table search_table = {
+ .forward_state = cocoa_search_set_forward,
+ .back_state = cocoa_search_set_back,
+};
+
+struct gui_search_table *cocoa_search_table = &search_table;
+
+@implementation SearchWindowController
+
+- (instancetype)init
+{
+ if ((self = [super initWithWindowNibName:@"SearchWindow"]) == nil)
+ return nil;
+
+ [self bind:@"browser" toObject:NSApp withKeyPath:@"frontTab" options:nil];
+ _canGoBack = YES;
+ _canGoForward = YES;
+
+ return self;
+}
+
+- (void)dealloc
+{
+ [self unbind:@"browser"];
+}
+
+- (IBAction)searchNext:(id)sender
+{
+ [self search:SearchForward];
+}
+
+- (IBAction)searchPrevious:(id)sender
+{
+ [self search:SearchBackward];
+}
+
+- (void)search:(SearchDirection)direction
+{
+ search_flags_t flags = (direction == SearchForward) ? SEARCH_FLAG_FORWARDS : 0;
+
+ if (self.caseSensitive) {
+ flags |= SEARCH_FLAG_CASE_SENSITIVE;
+ }
+
+ if (self.selectAll) {
+ flags |= SEARCH_FLAG_SHOWALL;
+ }
+
+ struct browser_window *bw = self.browser.browser;
+ browser_window_search(bw, (__bridge void *)self, flags, self.searchString.UTF8String);
+}
+
+- (IBAction)searchStringDidChange:(id)sender
+{
+ struct browser_window *bw = self.browser.browser;
+ browser_window_search_clear(bw);
+
+ [self setCanGoBack:YES];
+ [self setCanGoForward:YES];
+}
+
+- (void)setCaseSensitive:(BOOL)newValue
+{
+ if (_caseSensitive != newValue) {
+ _caseSensitive = newValue;
+ self.canGoBack = YES;
+ self.canGoForward = YES;
+ }
+}
+
+- (void)setSelectAll:(BOOL)newValue
+{
+ if (_selectAll != newValue) {
+ _selectAll = newValue;
+ self.canGoBack = YES;
+ self.canGoForward = YES;
+ }
+}
+
+static void cocoa_search_set_back(bool active, void *p)
+{
+ [(__bridge SearchWindowController *)p setCanGoBack:active];
+}
+
+static void cocoa_search_set_forward(bool active, void *p)
+{
+ [(__bridge SearchWindowController *)p setCanGoForward:active];
+}
+
+@end