/* * Copyright 2011 Sven Weidauer * * 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 . */ #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