diff options
author | Ole Loots <ole@monochrom.net> | 2013-01-16 03:21:35 +0100 |
---|---|---|
committer | Ole Loots <ole@monochrom.net> | 2013-01-16 03:21:35 +0100 |
commit | 4f0ae4e12868ddf26e7018e0a3dec4badaa1b1b6 (patch) | |
tree | 4e9c63a447215553179dd4fe89e5c1cc7788442b /atari/search.c | |
parent | 6a32f94cc22f26afa43bfb58688688ae704e5514 (diff) | |
download | netsurf-4f0ae4e12868ddf26e7018e0a3dec4badaa1b1b6.tar.gz netsurf-4f0ae4e12868ddf26e7018e0a3dec4badaa1b1b6.tar.bz2 |
Search form inside browser windows starts to work.
Diffstat (limited to 'atari/search.c')
-rw-r--r-- | atari/search.c | 263 |
1 files changed, 71 insertions, 192 deletions
diff --git a/atari/search.c b/atari/search.c index efe6cebb2..dac93fc2a 100644 --- a/atari/search.c +++ b/atari/search.c @@ -44,15 +44,8 @@ #include "atari/res/netsurf.rsh"
extern struct gui_window * input_window;
-extern void * h_gem_rsrc; -extern GRECT desk_area;
-static SEARCH_FORM_SESSION current; -static OBJECT *dlgtree; -static GUIWIN *searchwin; -static short h_aes_win;
-
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);
@@ -76,7 +69,8 @@ static struct gui_search_callbacks nsatari_search_callbacks = { void nsatari_search_set_status(bool found, void *p)
{
- LOG(("%p set status: %d\n", p, found));
+ LOG(("%p set status: %d\n", p, found)); + // TODO: maybe update GUI
}
/**
@@ -88,8 +82,8 @@ void nsatari_search_set_status(bool found, void *p) void nsatari_search_set_hourglass(bool active, void *p)
{
SEARCH_FORM_SESSION s = (SEARCH_FORM_SESSION)p;
- LOG((""));
- if (active && current != NULL)
+ LOG(("active: %d, session: %p", active, p));
+ if (active)
gui_window_set_pointer(s->bw->window, GUI_POINTER_PROGRESS);
else
gui_window_set_pointer(s->bw->window, GUI_POINTER_DEFAULT);
@@ -119,7 +113,8 @@ 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));
+ LOG(("%p: set forward state: %d\n", p, active)); + // TODO: update gui
}
/**
@@ -132,46 +127,31 @@ 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));
-}
- -/*
-void search_redraw(void *session, GRECT *clip) -{ - GRECT area, clipped_area; - struct gui_window *gw = input_window; - short pxy[4]; - VdiHdl vh; - - if(gw == NULL) - return; - - window_get_grect(gw->root, BROWSER_AREA_SEARCH, &area); - - clipped_area = area; - - if (!rc_intersect(clip, &clipped_area)) { - return; - } - - OBJECT * tree = get_tree(SEARCH); - tree->ob_x = area.g_x; - tree->ob_y = area.g_y; - tree->ob_width = area.g_w; - tree->ob_height = area.g_h; - - objc_draw_grect(tree, 0, 8, &clipped_area); + LOG(("%p: set back state: %d\n", p, active)); + // TODO: update gui
} -*/ + -static SEARCH_FORM_SESSION get_search_session(GUIWIN * win)
+static int apply_form(OBJECT *obj, struct s_search_form_state *s)
{
- return (current);
-}
+ char * cstr; + assert(s != NULL); +
+ s->flags = 0; +
+ if( (obj[TOOLBAR_CB_CASESENSE].ob_state & OS_SELECTED) != 0 )
+ s->flags |= SEARCH_FLAG_CASE_SENSITIVE;
+ if( (obj[TOOLBAR_CB_SHOWALL].ob_state & OS_SELECTED) != 0 )
+ s->flags |= SEARCH_FLAG_SHOWALL;
+ cstr = get_text(obj, TOOLBAR_TB_SRCH); + snprintf(s->text, 11, "%s", cstr); + return ( 0 );
+
+}
-static void set_text( short idx, char * text, int len )
+static void set_text(OBJECT *obj, short idx, char * text, int len )
{
char spare[255];
@@ -183,66 +163,37 @@ static void set_text( short idx, char * text, int len ) strcpy(spare, "");
} - set_string(dlgtree, idx, spare);
+ set_string(obj, idx, spare);
} -static void destroy_search_session(SEARCH_FORM_SESSION s)
+void nsatari_search_session_destroy(struct s_search_form_session *s)
{
- if(s != NULL ){
- LOG((""));
+ if (s != NULL) {
+ LOG(("")); + browser_window_search_destroy_context(s->bw);
free(s);
}
}
-static int apply_form(GUIWIN *win, struct s_search_form_state * s)
+/* checks for search parameters changes */
+static bool search_session_compare(struct s_search_form_session *s, OBJECT *obj)
{
- OBJECT * obj = dlgtree; - char * cstr; -
- if( obj == NULL ){
- goto error;
- } -
- s->flags = 0;
- if( (obj[SEARCH_CB_FWD].ob_state & OS_SELECTED) != 0 )
- s->flags = SEARCH_FLAG_FORWARDS;
- if( (obj[SEARCH_CB_CASESENSE].ob_state & OS_SELECTED) != 0 )
- s->flags |= SEARCH_FLAG_CASE_SENSITIVE;
- if( (obj[SEARCH_CB_SHOWALL].ob_state & OS_SELECTED) != 0 )
- s->flags |= SEARCH_FLAG_SHOWALL;
+ bool check; + uint32_t flags_old;
+ uint32_t flags_mask = SEARCH_FLAG_SHOWALL | SEARCH_FLAG_CASE_SENSITIVE; + struct s_search_form_state cur;
- cstr = get_text(dlgtree, SEARCH_TB_SRCH); - snprintf(s->text, 31, "%s", cstr); - return ( 0 );
+ assert(s != NULL && obj != NULL); -error:
- s->flags = SEARCH_FLAG_FORWARDS;
- strncpy((char*)&s->text[0], "", 31 );
- return( 1 );
-}
+ flags_old = s->state.flags; -/* checks for search parameters changes */
-static bool form_changed(GUIWIN * w)
-{
- bool check;
- struct s_search_form_state cur;
- SEARCH_FORM_SESSION s = get_search_session(w);
- if( s == NULL )
- return false; - OBJECT * obj = dlgtree;
- 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 ){
+ apply_form(obj, &cur);
+ if ((cur.flags&flags_mask) != (flags_old&flags_mask)) {
return( true );
}
char * cstr; - cstr = get_text(obj, SEARCH_TB_SRCH);
+ cstr = get_text(obj, TOOLBAR_TB_SRCH);
if (cstr != NULL){
if (strcmp(cstr, (char*)&s->state.text) != 0) {
return (true);
@@ -253,123 +204,51 @@ static bool form_changed(GUIWIN * w) }
-static void __CDECL evnt_bt_srch_click(GUIWIN * win, int index, int unused, void *unused2)
+void nsatari_search_perform(struct s_search_form_session *s, OBJECT *obj, + search_flags_t f)
{
bool fwd;
- SEARCH_FORM_SESSION s = get_search_session(searchwin);
- OBJECT * obj = dlgtree;
- search_flags_t flags = 0;
-
+ search_flags_t flags = f; + + assert(s!=null);
- if( form_changed(searchwin) ){
+ if(search_session_compare(s, obj)){ + printf("reset search form\n");
browser_window_search_destroy_context(s->bw);
- apply_form(searchwin, &s->state);
+ apply_form(obj, &s->state);
} else {
- /* get search direction manually: */
- if( (obj[SEARCH_CB_FWD].ob_state & OS_SELECTED) != 0 )
- s->state.flags |= SEARCH_FLAG_FORWARDS;
- else
- s->state.flags &= (~SEARCH_FLAG_FORWARDS);
- }
- if( browser_window_search_verify_new(s->bw, &nsatari_search_callbacks, s) ){
- browser_window_search_step(s->bw, s->state.flags, get_text(obj, SEARCH_TB_SRCH));
- }
-}
-
-static void __CDECL evnt_cb_click(GUIWIN *win, int index, int unused, void *unused2)
-{
+ } + + /* get search direction manually: */
+ if ( (f&SEARCH_FLAG_FORWARDS) != 0 )
+ s->state.flags |= SEARCH_FLAG_FORWARDS;
+ else
+ s->state.flags &= (~SEARCH_FLAG_FORWARDS); - short newstate;
+ if( browser_window_search_verify_new(s->bw, &nsatari_search_callbacks, s) ){ + printf("searching for: %s\n", get_text(obj, TOOLBAR_TB_SRCH));
+ browser_window_search_step(s->bw, s->state.flags, + get_text(obj, TOOLBAR_TB_SRCH));
+ }
}
-static void __CDECL evnt_close(GUIWIN *win, short buff[8])
-{
-
-}
-void search_destroy(struct gui_window *gw) +struct s_search_form_session * nsatari_search_session_create(OBJECT * obj, + struct browser_window *bw) { - /* Free Search Contexts */
- /* todo: destroy search context, if any? */ - LOG(("")); -
- if (current != NULL){
- destroy_search_session(current); - current = NULL;
- } + struct s_search_form_session *sfs; - guiwin_remove(searchwin); - searchwin = NULL; + sfs = calloc(1, sizeof(struct s_search_form_session)); - wind_close(h_aes_win); - wind_delete(h_aes_win); - h_aes_win = -1; + assert(sfs); - LOG(("done")); -} -
-SEARCH_FORM_SESSION open_browser_search(struct gui_window * gw)
-{
- char * title;
- SEARCH_FORM_SESSION sfs;
- GRECT pos, treesize; - uint32_t kind = CLOSER | NAME | MOVER; - - if (dlgtree == NULL) { - dlgtree = get_tree(SEARCH);
- if (dlgtree == NULL) {
- return( NULL );
- } - } + sfs->bw = bw; + apply_form(obj, &sfs->state); - if(searchwin){ - search_destroy(gw); - } -
-
- sfs = calloc(1, sizeof(struct s_search_form_session));
- if( sfs == NULL )
- return( NULL );
-
- title = (char*)messages_get("FindTextNS");
- if (title == NULL)
- title = (char*)"Find text ..."; + browser_window_search_destroy_context(bw); - /* setup dipslay position: right corner */
- treesize.g_x = 0;
- treesize.g_y = 0;
- treesize.g_w = dlgtree->ob_width;
- treesize.g_h = dlgtree->ob_height;
- wind_calc_grect(WC_BORDER, kind, &treesize, &pos);
- pos.g_x = desk_area.g_w - pos.g_w;
- pos.g_y = desk_area.g_h - pos.g_h;
- - /* create the dialog: */ - h_aes_win = wind_create_grect(kind, &pos); - wind_set_str(h_aes_win, WF_NAME, title); -
-
- current = sfs;
- sfs->bw = gw->browser->bw; -/*
- sfs->formwind = mt_FormCreate( &app, tree, WAT_FORM,
- NULL, title,
- &pos, 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(searchwin, &sfs->state ); - set_text(SEARCH_TB_SRCH, (char*)"", 31);
-
- return(current);
-
-}
+ return(sfs); +} |