summaryrefslogtreecommitdiff
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
parent6a32f94cc22f26afa43bfb58688688ae704e5514 (diff)
downloadnetsurf-4f0ae4e12868ddf26e7018e0a3dec4badaa1b1b6.tar.gz
netsurf-4f0ae4e12868ddf26e7018e0a3dec4badaa1b1b6.tar.bz2
Search form inside browser windows starts to work.
-rw-r--r--atari/deskmenu.c4
-rw-r--r--atari/gemtk/gemtk.h4
-rw-r--r--atari/gemtk/guiwin.c46
-rw-r--r--atari/gui.c2
-rwxr-xr-xatari/gui.h2
-rwxr-xr-xatari/misc.c6
-rwxr-xr-xatari/plot/plot.c20
-rwxr-xr-xatari/res/netsurf.rsh2
-rwxr-xr-xatari/res/netsurf.rsm2
-rwxr-xr-xatari/rootwin.c37
-rwxr-xr-xatari/rootwin.h2
-rw-r--r--atari/search.c263
-rw-r--r--atari/search.c.old375
-rw-r--r--atari/search.h10
-rw-r--r--atari/search.h.old52
-rw-r--r--atari/toolbar.c28
16 files changed, 635 insertions, 220 deletions
diff --git a/atari/deskmenu.c b/atari/deskmenu.c
index e61ef5271..9c96c69fc 100644
--- a/atari/deskmenu.c
+++ b/atari/deskmenu.c
@@ -269,9 +269,7 @@ static void __CDECL menu_find(short item, short title, void *data)
static bool visible = false;
LOG(("%s", __FUNCTION__));
if( input_window != NULL ){
- visible = !visible;
- toolbar_set_visible(input_window->root->toolbar, TOOLBAR_AREA_SEARCH,
- visible);
+ window_open_search(input_window->root);
}
}
diff --git a/atari/gemtk/gemtk.h b/atari/gemtk/gemtk.h
index 42b9342bc..8361a1488 100644
--- a/atari/gemtk/gemtk.h
+++ b/atari/gemtk/gemtk.h
@@ -102,7 +102,6 @@ short msg_box_show(short type, const char * msg);
#define GW_FLAG_RECV_PREPROC_WM 0x02 // get notified even when pre-processed
#define GW_FLAG_HAS_VTOOLBAR 0x04 // the attached toolbar is vertical
#define GW_FLAG_CUSTOM_TOOLBAR 0x08 // no internal toolbar handling
-//#define GW_FLAG_TOOLBAR_REDRAW 0x10 // enable internal toolbar redraw
#define GW_FLAG_CUSTOM_SCROLLING 0x20 // no internal scroller handling
#define GW_FLAG_DEFAULTS (GW_FLAG_PREPROC_WM | GW_FLAG_RECV_PREPROC_WM)
@@ -110,8 +109,7 @@ short msg_box_show(short type, const char * msg);
#define GW_STATUS_ICONIFIED 0x01
#define GW_STATUS_SHADED 0x02
-#define GW_XTYPE_CHECKBOX (101 << 8)
-#define GW_CB_SELECTED (OS_SELECTED | OS_CROSSED)
+#define GW_CB_SELECTED (OS_SELECTED)
#define GUIWIN_VSLIDER 0x01
#define GUIWIN_HSLIDER 0x02
diff --git a/atari/gemtk/guiwin.c b/atari/gemtk/guiwin.c
index d79d48bb1..93bc1bfdd 100644
--- a/atari/gemtk/guiwin.c
+++ b/atari/gemtk/guiwin.c
@@ -382,6 +382,10 @@ static short preproc_mu_button(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8])
gw->handler_func(gw, ev_out, msg_out);
ev_out->emo_events = oldevents;
retval = 1;
+ } else {
+ if (gw->toolbar_edit_obj != -1) {
+ gw->toolbar_edit_obj = -1;
+ }
}
}
@@ -443,6 +447,10 @@ static short preproc_mu_button(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8])
evnt_timer(150);
}
}
+ else {
+ gw->form_edit_obj = -1;
+
+ }
}
return(retval);
@@ -453,6 +461,40 @@ static short preproc_mu_button(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8])
*/
static short preproc_mu_keybd(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8])
{
+ short retval = 0;
+
+ if((gw->toolbar != NULL) && (gw->toolbar_edit_obj > -1) ) {
+
+ short next_edit_obj = gw->toolbar_edit_obj;
+ short next_char = -1;
+ short edit_idx;
+ short r;
+
+ r = form_wkeybd(gw->toolbar, gw->toolbar_edit_obj, next_edit_obj,
+ ev_out->emo_kreturn,
+ &next_edit_obj, &next_char, gw->handle);
+
+ if (next_edit_obj != gw->toolbar_edit_obj) {
+
+ if(gw->toolbar_edit_obj != -1) {
+ objc_wedit(gw->toolbar, gw->toolbar_edit_obj,
+ ev_out->emo_kreturn, &edit_idx,
+ EDEND, gw->handle);
+ }
+
+ gw->toolbar_edit_obj = next_edit_obj;
+
+ objc_wedit(gw->toolbar, gw->toolbar_edit_obj,
+ ev_out->emo_kreturn, &edit_idx,
+ EDINIT, gw->handle);
+ } else {
+ if(next_char > 13)
+ r = objc_wedit(gw->toolbar, gw->toolbar_edit_obj,
+ ev_out->emo_kreturn, &edit_idx,
+ EDCHAR, gw->handle);
+ }
+ retval = 1;
+ }
if((gw->form != NULL) && (gw->form_edit_obj > -1) ) {
@@ -485,6 +527,7 @@ static short preproc_mu_keybd(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8])
EDCHAR, gw->handle);
}
}
+ return(retval);
}
/**
@@ -563,6 +606,9 @@ short guiwin_dispatch_event(EVMULT_IN *ev_in, EVMULT_OUT *ev_out, short msg[8])
if ((ev_out->emo_events & MU_KEYBD)) {
retval = preproc_mu_keybd(dest, ev_out, msg);
+ if(retval != 0) {
+ handler_called = true;
+ }
}
if (handler_called==false) {
diff --git a/atari/gui.c b/atari/gui.c
index ca49187b5..bb12f3f87 100644
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -255,7 +255,7 @@ void gui_window_destroy(struct gui_window *w)
gui_set_input_gui_window(NULL);
}
- search_destroy(w);
+ nsatari_search_session_destroy(w->search);
free(w->browser);
free(w->status);
free(w->title);
diff --git a/atari/gui.h b/atari/gui.h
index 4bbca493b..c11438493 100755
--- a/atari/gui.h
+++ b/atari/gui.h
@@ -150,7 +150,7 @@ struct gui_window {
char * url;
struct bitmap * icon;
struct s_caret caret;
- struct search_form_session *search;
+ struct s_search_form_session *search;
struct gui_window *next, *prev;
};
diff --git a/atari/misc.c b/atari/misc.c
index 21b636e2a..d339379db 100755
--- a/atari/misc.c
+++ b/atari/misc.c
@@ -512,8 +512,10 @@ void dbg_pxy(const char * str, short * pxy )
void dbg_rect(const char * str, int * pxy)
{
- printf("%s: x: %d, y: %d, w: %d, h: %d\n", str,
- pxy[0], pxy[1], pxy[2], pxy[3] );
+ printf("%s: x0: %d, y0: %d, x1: %d, y1: %d (w: %d, h: %d)\n", str,
+ pxy[0], pxy[1], pxy[2], pxy[3],
+ pxy[2] - pxy[0],
+ pxy[3] - pxy[1] );
}
/* some LDG functions here to reduce dependencies */
diff --git a/atari/plot/plot.c b/atari/plot/plot.c
index 71382db2b..eb44e47b8 100755
--- a/atari/plot/plot.c
+++ b/atari/plot/plot.c
@@ -1685,6 +1685,7 @@ bool plot_unlock(void)
wind_update(END_MCTRL);
wind_update(END_UPDATE);
graf_mouse(M_ON, NULL);
+ vs_clip_off(atari_plot_vdi_handle);
atari_plot_flags &= ~PLOT_FLAG_LOCKED;
return(false);
}
@@ -1906,10 +1907,10 @@ bool plot_clip(const struct rect *clip)
plot_get_dimensions(&canvas);
- view.clipping.x0 = clip->x0;
view.clipping.y0 = clip->y0;
- view.clipping.x1 = clip->x1;
view.clipping.y1 = clip->y1;
+ view.clipping.x0 = clip->x0;
+ view.clipping.x1 = clip->x1;
plot_get_clip_grect(&gclip);
@@ -1918,9 +1919,18 @@ bool plot_clip(const struct rect *clip)
rc_intersect(&canvas, &gclip);
- //dbg_grect("canvas clipped: ", &gclip);
+ if(gclip.g_h < 0){
+ gclip.g_h = 0;
+ }
- assert(rc_intersect(&screen, &gclip));
+ if (!rc_intersect(&screen, &gclip)) {
+ dbg_rect("cliprect: ", &view.clipping);
+ dbg_grect("screen: ", &canvas);
+ dbg_grect("canvas clipped: ", &gclip);
+ //assert(1 == 0);
+ }
+
+ //assert(rc_intersect(&screen, &gclip));
//dbg_grect("canvas clipped to screen", &gclip);
@@ -1947,7 +1957,9 @@ bool plot_get_clip(struct rect * out)
void plot_get_clip_grect(GRECT * out)
{
struct rect clip={0,0,0,0};
+
plot_get_clip(&clip);
+
out->g_x = clip.x0;
out->g_y = clip.y0;
out->g_w = clip.x1 - clip.x0;
diff --git a/atari/res/netsurf.rsh b/atari/res/netsurf.rsh
index 572015e5b..7fe6bc9b4 100755
--- a/atari/res/netsurf.rsh
+++ b/atari/res/netsurf.rsh
@@ -48,7 +48,7 @@
#define TOOLBAR_CB_SHOWALL 6 /* BUTTON in tree TOOLBAR */
#define TOOLBAR_TB_SRCH 7 /* FTEXT in tree TOOLBAR */
#define TOOLBAR_SEARCH_ALIGN_RIGHT 8 /* IBOX in tree TOOLBAR */
-#define TOOLBAR_CLOSE_SEARCH 9 /* BUTTON in tree TOOLBAR */
+#define TOOLBAR_BT_CLOSE_SEARCH 9 /* BUTTON in tree TOOLBAR */
#define TOOLBAR_AREA_NAVIGATION 10 /* BOX in tree TOOLBAR */
#define TOOLBAR_AREA_BUTTONS 11 /* IBOX in tree TOOLBAR */
#define TOOLBAR_BT_BACK 12 /* CICON in tree TOOLBAR */
diff --git a/atari/res/netsurf.rsm b/atari/res/netsurf.rsm
index 8c429efd0..9f0c5c28c 100755
--- a/atari/res/netsurf.rsm
+++ b/atari/res/netsurf.rsm
@@ -51,7 +51,7 @@ ResourceMaster v3.65
#O 6@26@CB_SHOWALL@@
#O 7@29@TB_SRCH@@
#O 8@25@SEARCH_ALIGN_RIGHT@@
-#O 9@26@CLOSE_SEARCH@@
+#O 9@26@BT_CLOSE_SEARCH@@
#O 10@20@AREA_NAVIGATION@@
#O 11@25@AREA_BUTTONS@@
#O 12@33@BT_BACK@@
diff --git a/atari/rootwin.c b/atari/rootwin.c
index 67cb10971..3ed5264d3 100755
--- a/atari/rootwin.c
+++ b/atari/rootwin.c
@@ -598,6 +598,32 @@ void window_get_grect(ROOTWIN *rootwin, enum browser_area_e which, GRECT *d)
}
+void window_open_search(ROOTWIN *rootwin)
+{
+ struct browser_window *bw;
+ GRECT area;
+
+ bw = rootwin->active_gui_window->browser->bw;
+
+ toolbar_set_visible(rootwin->toolbar, TOOLBAR_AREA_SEARCH, true);
+ window_get_grect(rootwin, BROWSER_AREA_SEARCH, &area);
+ window_schedule_redraw_grect(rootwin, &area);
+ window_get_grect(rootwin, BROWSER_AREA_CONTENT, &area);
+ browser_window_reformat(bw, false, area.g_w, area.g_h);
+}
+
+void window_close_search(ROOTWIN *rootwin)
+{
+ struct browser_window *bw;
+ GRECT area;
+
+ bw = rootwin->active_gui_window->browser->bw;
+
+ toolbar_set_visible(rootwin->toolbar, TOOLBAR_AREA_SEARCH, false);
+ window_get_grect(rootwin, BROWSER_AREA_CONTENT, &area);
+ browser_window_reformat(bw, false, area.g_w, area.g_h);
+}
+
/**
* Redraw the favicon
*/
@@ -885,15 +911,15 @@ void window_process_redraws(ROOTWIN * rootwin)
// hide caret:
window_place_caret(rootwin, 0, -1, -1, -1, &content_area);
}
-
+/*
short pxy_clip[4];
-
pxy_clip[0] = tb_area.g_x;
pxy_clip[0] = tb_area.g_y;
pxy_clip[0] = pxy_clip[0] + tb_area.g_w + content_area.g_w - 1;
pxy_clip[0] = pxy_clip[1] + tb_area.g_h + content_area.g_h - 1;
vs_clip(guiwin_get_vdi_handle(rootwin->win), 1, pxy_clip);
-
+ //guiwin_clear(rootwin->win);
+*/
wind_get_grect(rootwin->aes_handle, WF_FIRSTXYWH, &visible_ro);
while (visible_ro.g_w > 0 && visible_ro.g_h > 0) {
@@ -914,7 +940,7 @@ void window_process_redraws(ROOTWIN * rootwin)
GRECT rdrw_area = rdrw_area_ro;
if (rc_intersect(&tb_area, &rdrw_area)) {
- toolbar_redraw(rootwin->toolbar, &rdrw_area);
+ toolbar_redraw(rootwin->toolbar, &rdrw_area);
}
rdrw_area = rdrw_area_ro;
@@ -945,6 +971,7 @@ void window_process_redraws(ROOTWIN * rootwin)
caret_rdrw_required = true;
}
}
+
}
}
wind_get_grect(rootwin->aes_handle, WF_NEXTXYWH, &visible_ro);
@@ -952,7 +979,7 @@ void window_process_redraws(ROOTWIN * rootwin)
// disable clipping:
- vs_clip(guiwin_get_vdi_handle(rootwin->win), 0, pxy_clip);
+ //vs_clip(guiwin_get_vdi_handle(rootwin->win), 0, pxy_clip);
if (caret_rdrw_required && ((rootwin->caret.state & CARET_STATE_ENABLED)!=0)) {
diff --git a/atari/rootwin.h b/atari/rootwin.h
index 3d06615c8..78f2d1c6c 100755
--- a/atari/rootwin.h
+++ b/atari/rootwin.h
@@ -73,6 +73,8 @@ void window_set_title(ROOTWIN *rootwin, char * text);
void window_set_content_size(ROOTWIN *rootwin, int w, int h);
void window_set_icon(ROOTWIN *rootwin, struct bitmap * bmp );
void window_set_active_gui_window(ROOTWIN *rootwin, struct gui_window *gw);
+void window_open_search(ROOTWIN *rootwin);
+void window_close_search(ROOTWIN *rootwin);
void window_scroll_by(ROOTWIN *rootwin, int x, int y);
void window_schedule_redraw_grect(ROOTWIN *rootwin, GRECT *area);
void window_process_redraws(ROOTWIN * rootwin);
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);
+}
diff --git a/atari/search.c.old b/atari/search.c.old
new file mode 100644
index 000000000..efe6cebb2
--- /dev/null
+++ b/atari/search.c.old
@@ -0,0 +1,375 @@
+/*
+ * Copyright 2013 Ole Loots <ole@monochrom.net>
+ *
+ * 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/>.
+ *
+ * Module Description:
+ *
+ *
+ *
+ */
+
+
+#include <limits.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdbool.h>
+#include <assert.h>
+
+#include "desktop/gui.h"
+#include "desktop/browser.h"
+#include "desktop/browser_private.h"
+#include "desktop/search.h"
+#include "utils/log.h"
+#include "utils/messages.h"
+#include "atari/gui.h"
+#include "atari/rootwin.h"
+#include "atari/misc.h"
+#include "atari/search.h"
+#include "atari/gemtk/gemtk.h"
+#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);
+void nsatari_search_set_forward_state(bool active, void *p);
+void nsatari_search_set_back_state(bool active, void *p);
+
+static struct gui_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;
+ LOG((""));
+ if (active && current != NULL)
+ 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));
+}
+
+/*
+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);
+}
+*/
+
+static SEARCH_FORM_SESSION get_search_session(GUIWIN * win)
+{
+ return (current);
+}
+
+
+
+static void set_text( short idx, char * text, int len )
+{
+ char spare[255];
+
+ if( len > 254 )
+ len = 254;
+ if( text != NULL ){
+ strncpy(spare, text, 254);
+ } else {
+ strcpy(spare, "");
+ }
+
+ set_string(dlgtree, idx, spare);
+}
+
+static void destroy_search_session(SEARCH_FORM_SESSION s)
+{
+ if(s != NULL ){
+ LOG((""));
+ free(s);
+ }
+}
+
+static int apply_form(GUIWIN *win, struct s_search_form_state * s)
+{
+ 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;
+
+ cstr = get_text(dlgtree, SEARCH_TB_SRCH);
+ snprintf(s->text, 31, "%s", cstr);
+ return ( 0 );
+
+error:
+ s->flags = SEARCH_FLAG_FORWARDS;
+ strncpy((char*)&s->text[0], "", 31 );
+ return( 1 );
+}
+
+/* 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 ){
+ return( true );
+ }
+
+ char * cstr;
+ cstr = get_text(obj, SEARCH_TB_SRCH);
+ if (cstr != NULL){
+ if (strcmp(cstr, (char*)&s->state.text) != 0) {
+ return (true);
+ }
+ }
+
+ return( false );
+}
+
+
+static void __CDECL evnt_bt_srch_click(GUIWIN * win, int index, int unused, void *unused2)
+{
+
+ bool fwd;
+ SEARCH_FORM_SESSION s = get_search_session(searchwin);
+ OBJECT * obj = dlgtree;
+ search_flags_t flags = 0;
+
+
+ if( form_changed(searchwin) ){
+ browser_window_search_destroy_context(s->bw);
+ apply_form(searchwin, &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)
+{
+
+ short newstate;
+
+}
+
+static void __CDECL evnt_close(GUIWIN *win, short buff[8])
+{
+
+}
+
+void search_destroy(struct gui_window *gw)
+{
+ /* Free Search Contexts */
+ /* todo: destroy search context, if any? */
+ LOG((""));
+
+ if (current != NULL){
+ destroy_search_session(current);
+ current = NULL;
+ }
+
+ guiwin_remove(searchwin);
+ searchwin = NULL;
+
+ wind_close(h_aes_win);
+ wind_delete(h_aes_win);
+ h_aes_win = -1;
+
+ 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 );
+ }
+ }
+
+ 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 ...";
+
+ /* 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);
+
+}
diff --git a/atari/search.h b/atari/search.h
index 6cbc3e0a3..56ee7a681 100644
--- a/atari/search.h
+++ b/atari/search.h
@@ -21,6 +21,7 @@
*
*/
+#include "desktop/search.h"
#ifndef NS_ATARI_SEARCH_H
#define NS_ATARI_SEARCH_H
@@ -44,9 +45,10 @@ struct s_search_form_session {
typedef struct s_search_form_session * SEARCH_FORM_SESSION;
-SEARCH_FORM_SESSION open_browser_search(struct gui_window * gw);
-void search_destroy(struct gui_window * gw);
-
-void search_redraw(void *session, GRECT *clip);
+struct s_search_form_session * nsatari_search_session_create(OBJECT * obj,
+ struct browser_window *bw);
+void nsatari_search_session_destroy(struct s_search_form_session *s);
+void nsatari_search_perform(struct s_search_form_session *s, OBJECT *obj,
+ search_flags_t f);
#endif
diff --git a/atari/search.h.old b/atari/search.h.old
new file mode 100644
index 000000000..5cb8d07b6
--- /dev/null
+++ b/atari/search.h.old
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2013 Ole Loots <ole@monochrom.net>
+ *
+ * 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/>.
+ *
+ * Module Description:
+ *
+ *
+ *
+ */
+
+
+#ifndef NS_ATARI_SEARCH_H
+#define NS_ATARI_SEARCH_H
+
+#define SEARCH_MAX_SLEN 24
+
+struct gui_window;
+struct browser_window;
+
+struct s_search_form_state
+{
+ char text[32];
+ uint32_t flags;
+};
+
+struct s_search_form_session {
+ struct browser_window * bw;
+ 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);
+void search_destroy(struct gui_window * gw);
+
+struct s_search_session
+
+#endif
diff --git a/atari/toolbar.c b/atari/toolbar.c
index 99008e5a6..d4a9af4b3 100644
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -410,7 +410,7 @@ void toolbar_redraw(struct s_toolbar *tb, GRECT *clip)
.x1 = MAX(0,area.g_x - area_ro.g_x) + area.g_w,
.y1 = MAX(0,area.g_y - area_ro.g_y) + area.g_h
};
- //dbg_rect("tb textarea clip: ", &r);
+ dbg_rect("tb textarea clip: ", &r);
textarea_redraw(tb->url.textarea, 0, 0, &r, &toolbar_rdrw_ctx);
}
}
@@ -701,6 +701,9 @@ void toolbar_mouse_input(struct s_toolbar *tb, short obj, short button)
GRECT work;
short mx, my, mb, kstat;
int old;
+ OBJECT * toolbar_tree;
+ struct gui_window * gw;
+
if (obj==TOOLBAR_AREA_URL){
@@ -759,9 +762,28 @@ void toolbar_mouse_input(struct s_toolbar *tb, short obj, short button)
BROWSER_MOUSE_PRESS_1, mx, my );
}
}
- } else {
+ }
+ else if (obj==TOOLBAR_BT_SEARCH_FWD) {
+ gw = tb->owner->active_gui_window;
+ toolbar_tree = get_tree(TOOLBAR);
+ if (gw->search == NULL) {
+ struct browser_window * bw = gw->browser->bw;
+ gw->search = nsatari_search_session_create(toolbar_tree, bw);
+ }
+ assert(gw->search);
+ nsatari_search_perform(gw->search, toolbar_tree, SEARCH_FLAG_FORWARDS);
+ }
+ else if (obj==TOOLBAR_BT_CLOSE_SEARCH) {
+ gw = tb->owner->active_gui_window;
+ toolbar_tree = get_tree(TOOLBAR);
+ if (gw->search != NULL) {
+ nsatari_search_session_destroy(gw->search);
+ gw->search = NULL;
+ }
+ window_close_search(tb->owner);
+ }
+ else {
struct s_tb_button *bt = find_button(tb, obj);
- printf("found button: %p\n", bt);
if (bt != NULL && bt->state != button_off) {
bt->cb_click(tb);
struct gui_window * gw = window_get_active_gui_window(tb->owner);