diff options
Diffstat (limited to 'frontends/cocoa/SearchWindowController.m')
-rw-r--r-- | frontends/cocoa/SearchWindowController.m | 118 |
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 |