/* Copyright 1997 Acorn Computers Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/***************************************************/
/* File   : Browser.h                              */
/*                                                 */
/* Purpose: Browser window services.               */
/*                                                 */
/* Author : A.D.Hodgkinson                         */
/*                                                 */
/* History: 15-Mar-97: Created from Windows.h.     */
/***************************************************/

/* Definitions */

/* CanBeSelected will be non-zero if the token may be selected in some way */
/* (e.g. by drawing a box around it, changing its colour, etc.) and has    */
/* some defined action if clicked on.                                      */

#define CanBeSelected(t) (                                            \
                           ISLINK(t) ||                               \
                           (t)->tagno == TAG_TEXTAREA ||              \
                           (t)->tagno == TAG_SELECT   ||              \
                           (                                          \
                             ((t)->tagno == TAG_INPUT) &&             \
                             (HtmlINPUTtype(t) != inputtype_HIDDEN)   \
                           )                                          \
                         )

/* Function prototypes */

_kernel_oserror * browser_scroll_page_v           (browser_data * b, WimpOpenWindowBlock * o, int dir, int page, int line, int amount, int * limit);
_kernel_oserror * browser_scroll_page_h           (browser_data * b, WimpOpenWindowBlock * o, int dir, int page, int line, int amount, int * limit);
_kernel_oserror * browser_scroll_page_by_key      (browser_data * b, int key, int * limit);

HStream         * browser_find_first_selectable   (browser_data * b, WimpGetWindowStateBlock * s, int dir);
HStream         * browser_find_another_selectable (browser_data * b, HStream * token, int dir, int horiz);
int               browser_move_selection          (browser_data * b, int key);

char            * browser_fetch_url               (browser_data * b);
char            * browser_current_url             (browser_data * b);
char            * browser_current_title           (browser_data * b);

void              browser_destroy_source          (browser_data * b);

int               browser_pointer_entering        (int eventcode, WimpPollBlock * block, IdBlock * idb, void * handle);
int               browser_pointer_leaving         (int eventcode, WimpPollBlock * block, IdBlock * idb, void * handle);
void              browser_pointer_over_deleted    (browser_data * b);
int               browser_pointer_check           (int eventcode, WimpPollBlock * b, IdBlock * idb, browser_data * handle);
HStream         * browser_get_pointer_token       (browser_data * b, WimpGetPointerInfoBlock * p, int * ox, int * oy);

int               browser_line_at_y               (browser_data * b, reformat_cell * cell, int y);
int               browser_top_line                (browser_data * b, reformat_cell ** ret_cell, WimpGetWindowStateBlock * s, int fully_visible);
int               browser_bottom_line             (browser_data * b, reformat_cell ** ret_cell, WimpGetWindowStateBlock * s, int fully_visible);

_kernel_oserror * browser_update                  (browser_data * b, WimpRedrawWindowBlock * r, int noback, HStream * nocontent);
_kernel_oserror * browser_update_token            (browser_data * b, HStream * token, int noback, HStream * nocontent);
_kernel_oserror * browser_update_bottom           (browser_data * b, int top_y);

void              browser_highlight_token         (browser_data * b, HStream * token);
void              browser_clear_highlight         (browser_data * b, int wait);
void              browser_flash_token             (browser_data * b, HStream * token);
void              browser_select_token            (browser_data * b, HStream * token, int visible);
void              browser_clear_selection         (browser_data * b, int wait);

int               browser_show_token              (browser_data * b, HStream * token, int offset);
int               browser_ensure_visible          (browser_data * b, WimpGetWindowStateBlock * state, HStream * token);
int               browser_check_visible           (browser_data * b, WimpGetWindowStateBlock * state, HStream * token);
void              browser_show_named_anchor       (browser_data * b, char * anchor);
int               browser_display_local_reference (browser_data * b, char * url_requested, char * url_current);

_kernel_oserror * browser_set_look                (browser_data * b, ObjectId source, int underline_links, int use_source_cols, int show_foreground, int show_background);

_kernel_oserror * browser_give_general_focus      (browser_data * b);

_kernel_oserror * browser_inherit                 (browser_data * parent, browser_data * child);
_kernel_oserror * browser_inherit_post_data       (browser_data * parent, browser_data * child);