summaryrefslogtreecommitdiff
path: root/atari/search.c
diff options
context:
space:
mode:
authorOle Loots <ole@monochrom.net>2013-01-16 03:21:35 +0100
committerOle Loots <ole@monochrom.net>2013-01-16 03:21:35 +0100
commit4f0ae4e12868ddf26e7018e0a3dec4badaa1b1b6 (patch)
tree4e9c63a447215553179dd4fe89e5c1cc7788442b /atari/search.c
parent6a32f94cc22f26afa43bfb58688688ae704e5514 (diff)
downloadnetsurf-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.c263
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);
+}