mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-26 08:19:55 +03:00
Implemented Search Dialog
svn path=/trunk/netsurf/; revision=11536
This commit is contained in:
parent
e1c11a1d54
commit
3694345204
0
atari/bitmap.c
Normal file → Executable file
0
atari/bitmap.c
Normal file → Executable file
0
atari/bitmap.h
Normal file → Executable file
0
atari/bitmap.h
Normal file → Executable file
0
atari/browser.c
Normal file → Executable file
0
atari/browser.c
Normal file → Executable file
0
atari/browser.h
Normal file → Executable file
0
atari/browser.h
Normal file → Executable file
0
atari/browser_win.c
Normal file → Executable file
0
atari/browser_win.c
Normal file → Executable file
0
atari/browser_win.h
Normal file → Executable file
0
atari/browser_win.h
Normal file → Executable file
0
atari/clipboard.h
Normal file → Executable file
0
atari/clipboard.h
Normal file → Executable file
0
atari/download.c
Normal file → Executable file
0
atari/download.c
Normal file → Executable file
0
atari/download.h
Normal file → Executable file
0
atari/download.h
Normal file → Executable file
0
atari/filetype.c
Normal file → Executable file
0
atari/filetype.c
Normal file → Executable file
0
atari/findfile.h
Normal file → Executable file
0
atari/findfile.h
Normal file → Executable file
0
atari/font.c
Normal file → Executable file
0
atari/font.c
Normal file → Executable file
0
atari/font.h
Normal file → Executable file
0
atari/font.h
Normal file → Executable file
0
atari/global_evnt.c
Normal file → Executable file
0
atari/global_evnt.c
Normal file → Executable file
0
atari/global_evnt.h
Normal file → Executable file
0
atari/global_evnt.h
Normal file → Executable file
2
atari/gui.c
Normal file → Executable file
2
atari/gui.c
Normal file → Executable file
@ -1130,7 +1130,7 @@ int main(int argc, char** argv)
|
|||||||
netsurf_init(&argc, &argv, options, messages);
|
netsurf_init(&argc, &argv, options, messages);
|
||||||
gui_init(argc, argv);
|
gui_init(argc, argv);
|
||||||
gui_init2(argc, argv);
|
gui_init2(argc, argv);
|
||||||
browser_window_create(cfg_homepage_url, 0, 0, true, false);
|
//browser_window_create(cfg_homepage_url, 0, 0, true, false);
|
||||||
graf_mouse( ARROW , NULL);
|
graf_mouse( ARROW , NULL);
|
||||||
netsurf_main_loop();
|
netsurf_main_loop();
|
||||||
netsurf_exit();
|
netsurf_exit();
|
||||||
|
0
atari/gui.h
Normal file → Executable file
0
atari/gui.h
Normal file → Executable file
0
atari/history.c
Normal file → Executable file
0
atari/history.c
Normal file → Executable file
0
atari/history.h
Normal file → Executable file
0
atari/history.h
Normal file → Executable file
0
atari/hotlist.c
Normal file → Executable file
0
atari/hotlist.c
Normal file → Executable file
0
atari/hotlist.h
Normal file → Executable file
0
atari/hotlist.h
Normal file → Executable file
0
atari/login.c
Normal file → Executable file
0
atari/login.c
Normal file → Executable file
0
atari/login.h
Normal file → Executable file
0
atari/login.h
Normal file → Executable file
0
atari/misc.c
Normal file → Executable file
0
atari/misc.c
Normal file → Executable file
0
atari/misc.h
Normal file → Executable file
0
atari/misc.h
Normal file → Executable file
0
atari/options.h
Normal file → Executable file
0
atari/options.h
Normal file → Executable file
0
atari/plot.c
Normal file → Executable file
0
atari/plot.c
Normal file → Executable file
0
atari/plot.h
Normal file → Executable file
0
atari/plot.h
Normal file → Executable file
0
atari/plot/eddi.h
Normal file → Executable file
0
atari/plot/eddi.h
Normal file → Executable file
0
atari/plot/eddi.s
Normal file → Executable file
0
atari/plot/eddi.s
Normal file → Executable file
0
atari/plot/font_freetype.c
Normal file → Executable file
0
atari/plot/font_freetype.c
Normal file → Executable file
0
atari/plot/font_freetype.h
Normal file → Executable file
0
atari/plot/font_freetype.h
Normal file → Executable file
0
atari/plot/font_vdi.c
Normal file → Executable file
0
atari/plot/font_vdi.c
Normal file → Executable file
0
atari/plot/font_vdi.h
Normal file → Executable file
0
atari/plot/font_vdi.h
Normal file → Executable file
0
atari/plot/plotter.c
Normal file → Executable file
0
atari/plot/plotter.c
Normal file → Executable file
0
atari/plot/plotter.h
Normal file → Executable file
0
atari/plot/plotter.h
Normal file → Executable file
0
atari/plot/plotter_vdi.c
Normal file → Executable file
0
atari/plot/plotter_vdi.c
Normal file → Executable file
0
atari/plot/plotter_vdi.h
Normal file → Executable file
0
atari/plot/plotter_vdi.h
Normal file → Executable file
0
atari/schedule.c
Normal file → Executable file
0
atari/schedule.c
Normal file → Executable file
0
atari/schedule.h
Normal file → Executable file
0
atari/schedule.h
Normal file → Executable file
257
atari/search.c
Normal file
257
atari/search.c
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
#include <limits.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <windom.h>
|
||||||
|
|
||||||
|
#include "desktop/gui.h"
|
||||||
|
#include "desktop/browser.h"
|
||||||
|
#include "desktop/search.h"
|
||||||
|
#include "utils/log.h"
|
||||||
|
#include "utils/messages.h"
|
||||||
|
#include "atari/gui.h"
|
||||||
|
#include "atari/misc.h"
|
||||||
|
#include "atari/search.h"
|
||||||
|
#include "atari/res/netsurf.rsh"
|
||||||
|
|
||||||
|
extern void * h_gem_rsrc;
|
||||||
|
|
||||||
|
|
||||||
|
static SEARCH_FORM_SESSION current;
|
||||||
|
|
||||||
|
static void nsatari_search_set_status(bool found, void *p);
|
||||||
|
static void nsatari_search_set_hourglass(bool active, void *p);
|
||||||
|
static void nsatari_search_add_recent(const char *string, void *p);
|
||||||
|
void nsatari_search_set_forward_state(bool active, void *p);
|
||||||
|
void nsatari_search_set_back_state(bool active, void *p);
|
||||||
|
|
||||||
|
static struct search_callbacks nsatari_search_callbacks = {
|
||||||
|
nsatari_search_set_forward_state,
|
||||||
|
nsatari_search_set_back_state,
|
||||||
|
nsatari_search_set_status,
|
||||||
|
nsatari_search_set_hourglass,
|
||||||
|
nsatari_search_add_recent
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the displayed search status.
|
||||||
|
* \param found search pattern matched in text
|
||||||
|
* \param p the pointer sent to search_verify_new() / search_create_context()
|
||||||
|
*/
|
||||||
|
|
||||||
|
void nsatari_search_set_status(bool found, void *p)
|
||||||
|
{
|
||||||
|
LOG(("%p set status: %d\n", p, found));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* display hourglass while searching
|
||||||
|
* \param active start/stop indicator
|
||||||
|
* \param p the pointer sent to search_verify_new() / search_create_context()
|
||||||
|
*/
|
||||||
|
|
||||||
|
void nsatari_search_set_hourglass(bool active, void *p)
|
||||||
|
{
|
||||||
|
SEARCH_FORM_SESSION s = (SEARCH_FORM_SESSION)p;
|
||||||
|
if( active )
|
||||||
|
gui_window_set_pointer(s->bw->window, GUI_POINTER_PROGRESS);
|
||||||
|
else
|
||||||
|
gui_window_set_pointer(s->bw->window, GUI_POINTER_DEFAULT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add search string to recent searches list
|
||||||
|
* front is at liberty how to implement the bare notification
|
||||||
|
* should normally store a strdup() of the string;
|
||||||
|
* core gives no guarantee of the integrity of the const char *
|
||||||
|
* \param string search pattern
|
||||||
|
* \param p the pointer sent to search_verify_new() / search_create_context()
|
||||||
|
*/
|
||||||
|
|
||||||
|
void nsatari_search_add_recent(const char *string, void *p)
|
||||||
|
{
|
||||||
|
LOG(("%p add recent: %s\n", p, string));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* activate search forwards button in gui
|
||||||
|
* \param active activate/inactivate
|
||||||
|
* \param p the pointer sent to search_verify_new() / search_create_context()
|
||||||
|
*/
|
||||||
|
|
||||||
|
void nsatari_search_set_forward_state(bool active, void *p)
|
||||||
|
{
|
||||||
|
SEARCH_FORM_SESSION s = (SEARCH_FORM_SESSION)p;
|
||||||
|
/* deactivate back cb */
|
||||||
|
LOG(("%p: set forward state: %d\n", p, active));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* activate search back button in gui
|
||||||
|
* \param active activate/inactivate
|
||||||
|
* \param p the pointer sent to search_verify_new() / search_create_context()
|
||||||
|
*/
|
||||||
|
|
||||||
|
void nsatari_search_set_back_state(bool active, void *p)
|
||||||
|
{
|
||||||
|
SEARCH_FORM_SESSION s = (SEARCH_FORM_SESSION)p;
|
||||||
|
/* deactivate back cb */
|
||||||
|
LOG(("%p: set back state: %d\n", p, active));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static SEARCH_FORM_SESSION get_search_session(WINDOW * win)
|
||||||
|
{
|
||||||
|
return (current);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void destroy_search_session( SEARCH_FORM_SESSION s )
|
||||||
|
{
|
||||||
|
free( s );
|
||||||
|
}
|
||||||
|
|
||||||
|
static int apply_form( WINDOW * win, struct s_search_form_state * s )
|
||||||
|
{
|
||||||
|
OBJECT * obj = ObjcTree(OC_FORM, win );
|
||||||
|
if( obj == NULL ){
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
s->flags = 0;
|
||||||
|
if( (obj[SEARCH_CB_FWD].ob_state & CROSSED) != 0 )
|
||||||
|
s->flags = SEARCH_FLAG_FORWARDS;
|
||||||
|
if( (obj[SEARCH_CB_CASESENSE].ob_state & CROSSED) != 0 )
|
||||||
|
s->flags |= SEARCH_FLAG_CASE_SENSITIVE;
|
||||||
|
if( (obj[SEARCH_CB_SHOWALL].ob_state & CROSSED) != 0 )
|
||||||
|
s->flags |= SEARCH_FLAG_SHOWALL;
|
||||||
|
|
||||||
|
char * cstr = ObjcString( obj, SEARCH_TB_SRCH, NULL );
|
||||||
|
if( cstr != NULL ) {
|
||||||
|
strncpy((char*)&s->text[0], cstr, 31 );
|
||||||
|
}
|
||||||
|
return ( 0 );
|
||||||
|
|
||||||
|
error:
|
||||||
|
s->flags = SEARCH_FLAG_FORWARDS;
|
||||||
|
/* s->forward = true; */
|
||||||
|
strncpy((char*)&s->text[0], "", 31 );
|
||||||
|
return( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* checks if search parameters changes */
|
||||||
|
static bool form_changed( WINDOW * w )
|
||||||
|
{
|
||||||
|
bool check;
|
||||||
|
struct s_search_form_state cur;
|
||||||
|
SEARCH_FORM_SESSION s = get_search_session(w);
|
||||||
|
OBJECT * obj = ObjcTree(OC_FORM, w);
|
||||||
|
assert( s != NULL && obj != NULL );
|
||||||
|
uint32_t flags_old = s->state.flags;
|
||||||
|
apply_form(w, &cur);
|
||||||
|
|
||||||
|
/* adjust the forward flag, it should not init an new search */
|
||||||
|
flags_old |= SEARCH_FLAG_FORWARDS;
|
||||||
|
cur.flags |= SEARCH_FLAG_FORWARDS;
|
||||||
|
if( cur.flags != flags_old ){
|
||||||
|
return( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
char * cstr = ObjcString( obj, SEARCH_TB_SRCH, NULL );
|
||||||
|
if( cstr != NULL ){
|
||||||
|
if( strcmp(cstr, (char*)&s->state.text) != 0 ) {
|
||||||
|
return ( true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void __CDECL evnt_bt_srch_click( WINDOW *win, int index, int unused, void *unused2) {
|
||||||
|
|
||||||
|
ObjcChange( OC_FORM, win, index, ~SELECTED, TRUE);
|
||||||
|
bool fwd;
|
||||||
|
SEARCH_FORM_SESSION s = get_search_session(win);
|
||||||
|
OBJECT * obj = ObjcTree(OC_FORM, s->formwind );
|
||||||
|
search_flags_t flags = 0;
|
||||||
|
|
||||||
|
if( s->bw->search_context == NULL || form_changed(win) ){
|
||||||
|
if( s->bw->search_context != NULL ) {
|
||||||
|
search_destroy_context(s->bw->search_context);
|
||||||
|
s->bw->search_context = NULL;
|
||||||
|
}
|
||||||
|
apply_form( win, &s->state );
|
||||||
|
} else {
|
||||||
|
/* get search direction manually: */
|
||||||
|
if( (obj[SEARCH_CB_FWD].ob_state & CROSSED) != 0 )
|
||||||
|
s->state.flags |= SEARCH_FLAG_FORWARDS;
|
||||||
|
else
|
||||||
|
s->state.flags &= (~SEARCH_FLAG_FORWARDS);
|
||||||
|
}
|
||||||
|
if( search_verify_new(s->bw, &nsatari_search_callbacks, s) ){
|
||||||
|
search_step(s->bw->search_context, s->state.flags, ObjcString( obj, SEARCH_TB_SRCH, NULL ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __CDECL evnt_cb_click( WINDOW *win, int index, int unused, void *unused2) {
|
||||||
|
|
||||||
|
short newstate;
|
||||||
|
OBJECT * obj = ObjcTree(OC_FORM, get_search_session(win)->formwind );
|
||||||
|
ObjcChange( OC_FORM, win, index, ~SELECTED, TRUE);
|
||||||
|
newstate = (obj[index].ob_state & CROSSED) ? ~CROSSED : CROSSED;
|
||||||
|
ObjcChange( OC_FORM, win, index, newstate , TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __CDECL evnt_close( WINDOW *win, short buff[8]) {
|
||||||
|
/* Free Search Contexts */
|
||||||
|
/* todo: destroy search context, if any */
|
||||||
|
destroy_search_session( get_search_session(win) );
|
||||||
|
current = NULL;
|
||||||
|
ApplWrite( _AESapid, WM_DESTROY, win->handle, 0,0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
SEARCH_FORM_SESSION open_browser_search( struct gui_window * gw )
|
||||||
|
{
|
||||||
|
char * title;
|
||||||
|
SEARCH_FORM_SESSION sfs;
|
||||||
|
OBJECT * tree = get_tree(SEARCH);
|
||||||
|
if( tree == NULL ){
|
||||||
|
return( NULL );
|
||||||
|
}
|
||||||
|
sfs = malloc(sizeof(struct s_search_form_session));
|
||||||
|
if( sfs == NULL )
|
||||||
|
return( NULL );
|
||||||
|
memset(sfs, 0, sizeof(struct s_search_form_session));
|
||||||
|
title = (char*)messages_get("FindTextNS");
|
||||||
|
if( title == NULL )
|
||||||
|
title = (char*)"Find text ...";
|
||||||
|
|
||||||
|
if( current != NULL ){
|
||||||
|
ApplWrite( _AESapid, WM_CLOSED, current->formwind->handle, 0,0,0,0);
|
||||||
|
/* Handle Close event */
|
||||||
|
EvntWindom( MU_MESAG );
|
||||||
|
/* Handle Destroy Event */
|
||||||
|
EvntWindom( MU_MESAG );
|
||||||
|
}
|
||||||
|
current = sfs;
|
||||||
|
sfs->bw = gw->browser->bw;
|
||||||
|
/* todo: check if we already have an form for this gw! */
|
||||||
|
sfs->formwind = mt_FormCreate( &app, tree, WAT_FORM,
|
||||||
|
NULL, title,
|
||||||
|
NULL, true, false);
|
||||||
|
|
||||||
|
ObjcAttachFormFunc( sfs->formwind, SEARCH_BT_SEARCH, evnt_bt_srch_click, NULL);
|
||||||
|
ObjcAttachFormFunc( sfs->formwind, SEARCH_CB_CASESENSE, evnt_cb_click, NULL);
|
||||||
|
ObjcAttachFormFunc( sfs->formwind, SEARCH_CB_SHOWALL, evnt_cb_click, NULL);
|
||||||
|
ObjcAttachFormFunc( sfs->formwind, SEARCH_CB_FWD, evnt_cb_click, NULL);
|
||||||
|
EvntAdd( sfs->formwind, WM_CLOSED, evnt_close, EV_TOP);
|
||||||
|
apply_form(sfs->formwind, &sfs->state );
|
||||||
|
strncpy( ObjcString( tree, SEARCH_TB_SRCH, NULL ), "", SEARCH_MAX_SLEN);
|
||||||
|
|
||||||
|
return( current );
|
||||||
|
|
||||||
|
}
|
23
atari/search.h
Normal file
23
atari/search.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#ifndef NS_ATARI_SEARCH_H
|
||||||
|
#define NS_ATARI_SEARCH_H
|
||||||
|
|
||||||
|
#define SEARCH_MAX_SLEN 24
|
||||||
|
|
||||||
|
struct s_search_form_state
|
||||||
|
{
|
||||||
|
char text[32];
|
||||||
|
uint32_t flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct s_search_form_session {
|
||||||
|
struct browser_window * bw;
|
||||||
|
WINDOW * formwind;
|
||||||
|
struct s_search_form_state state;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct s_search_form_session * SEARCH_FORM_SESSION;
|
||||||
|
|
||||||
|
SEARCH_FORM_SESSION open_browser_search(struct gui_window * gw);
|
||||||
|
|
||||||
|
#endif
|
0
atari/slider.c
Normal file → Executable file
0
atari/slider.c
Normal file → Executable file
0
atari/slider.h
Normal file → Executable file
0
atari/slider.h
Normal file → Executable file
0
atari/statusbar.c
Normal file → Executable file
0
atari/statusbar.c
Normal file → Executable file
0
atari/statusbar.h
Normal file → Executable file
0
atari/statusbar.h
Normal file → Executable file
0
atari/thumbnail.c
Normal file → Executable file
0
atari/thumbnail.c
Normal file → Executable file
5
atari/toolbar.c
Normal file → Executable file
5
atari/toolbar.c
Normal file → Executable file
@ -217,10 +217,10 @@ void __CDECL evnt_url_redraw( COMPONENT *c, long buff[8] )
|
|||||||
vsf_perimeter( vdih, 0 );
|
vsf_perimeter( vdih, 0 );
|
||||||
vsf_interior( vdih , 1 );
|
vsf_interior( vdih , 1 );
|
||||||
vsf_color( vdih, LWHITE );
|
vsf_color( vdih, LWHITE );
|
||||||
vst_arbpt( vdih, 10, &pxy[0], &pxy[1], &pxy[2], &pxy[3] );
|
vst_point( vdih, 10, &pxy[0], &pxy[1], &pxy[2], &pxy[3] );
|
||||||
vst_alignment(vdih, 0, 5, &d, &d );
|
vst_alignment(vdih, 0, 5, &d, &d );
|
||||||
vst_effects( vdih, 0 );
|
vst_effects( vdih, 0 );
|
||||||
|
vst_color( vdih, BLACK );
|
||||||
/* gray the whole component: */
|
/* gray the whole component: */
|
||||||
|
|
||||||
pxy[0] = work.g_x;
|
pxy[0] = work.g_x;
|
||||||
@ -261,7 +261,6 @@ void __CDECL evnt_url_redraw( COMPONENT *c, long buff[8] )
|
|||||||
else
|
else
|
||||||
strcpy( (char*)&textcpy, " " );
|
strcpy( (char*)&textcpy, " " );
|
||||||
|
|
||||||
vst_color( vdih, BLACK );
|
|
||||||
v_gtext( vdih, work.g_x + 3, work.g_y + ((TOOLBAR_HEIGHT - URLBOX_HEIGHT)/2) + 2, (char*)&textcpy );
|
v_gtext( vdih, work.g_x + 3, work.g_y + ((TOOLBAR_HEIGHT - URLBOX_HEIGHT)/2) + 2, (char*)&textcpy );
|
||||||
|
|
||||||
if( window_url_widget_has_focus( gw ) ) {
|
if( window_url_widget_has_focus( gw ) ) {
|
||||||
|
0
atari/toolbar.h
Normal file → Executable file
0
atari/toolbar.h
Normal file → Executable file
0
atari/treeview.c
Normal file → Executable file
0
atari/treeview.c
Normal file → Executable file
0
atari/treeview.h
Normal file → Executable file
0
atari/treeview.h
Normal file → Executable file
0
atari/verify_ssl.c
Normal file → Executable file
0
atari/verify_ssl.c
Normal file → Executable file
0
atari/verify_ssl.h
Normal file → Executable file
0
atari/verify_ssl.h
Normal file → Executable file
Loading…
Reference in New Issue
Block a user