#include "openaxiom-c-macros.h"
#include "debug.h"
#include "sockio.h"
#include "hyper.h"
static void clear_rbs(InputBox * list);
void
fill_box(Window w,ImageStruct * image)
{
XClearWindow(gXDisplay, w);
XPutImage(gXDisplay, w, gWindow->fControlGC,
image->image.xi, 0, 0, 0, 0,
image->width,
image->height);
}
void
toggle_input_box(HyperLink *link)
{
InputBox *box;
box = link->reference.box;
if (box->picked) {
box->picked = 0;
unpick_box(box);
}
else {
box->picked = 1;
pick_box(box);
}
}
void
toggle_radio_box(HyperLink *link)
{
InputBox *box;
box = link->reference.box;
if (box->picked) {
}
else {
clear_rbs(box->rbs->boxes);
box->picked = 1;
pick_box(box);
}
}
static void
clear_rbs(InputBox *list)
{
InputBox *trace = list;
while (trace && !trace->picked)
trace = trace->next;
if (trace != NULL) {
trace->picked = 0;
unpick_box(trace);
}
}
void
change_input_focus(HyperLink *link)
{
InputItem *new_item = link->reference.string;
InputItem *old_item = gWindow->page->current_item;
XWindowChanges wc;
if (old_item == new_item)
return;
gWindow->page->current_item = new_item;
wc.border_width = 1;
XConfigureWindow(gXDisplay, new_item->win,
CWBorderWidth,
&wc);
wc.border_width = 0;
XConfigureWindow(gXDisplay, new_item->win,
CWBorderWidth,
&wc);
update_inputsymbol(old_item);
update_inputsymbol(new_item);
}
void
next_input_focus()
{
InputItem *old_item = gWindow->page->current_item, *new_item, *trace;
if (gWindow->page->current_item == NULL ||
(gWindow->page->current_item->next == NULL
&& gWindow->page->current_item == gWindow->page->input_list)) {
BeepAtTheUser();
return;
}
new_item = NULL;
trace = old_item->next;
if (trace == NULL)
new_item = gWindow->page->input_list;
else
new_item = trace;
gWindow->page->current_item = new_item;
draw_inputsymbol(old_item);
draw_inputsymbol(new_item);
}
void
prev_input_focus()
{
InputItem *old_item = gWindow->page->current_item, *new_item, *trace;
if (gWindow->page->current_item == NULL) {
BeepAtTheUser();
return;
}
new_item = NULL;
trace = gWindow->page->input_list;
if (trace == old_item) {
while (trace->next != NULL)
trace = trace->next;
new_item = trace;
}
else {
while (trace->next != old_item)
trace = trace->next;
new_item = trace;
}
gWindow->page->current_item = new_item;
draw_inputsymbol(old_item);
draw_inputsymbol(new_item);
}
InputItem *
return_item(char *name)
{
InputItem *list;
list = gWindow->page->input_list;
while (list != NULL) {
if (!strcmp(name, list->name))
return list;
list = list->next;
}
return NULL;
}
int
delete_item(char *name)
{
InputItem *list;
InputItem *prev = NULL;
list = gWindow->page->input_list;
while (list != NULL) {
if (!strcmp(name, list->name)) {
if (prev)
prev->next = list->next;
else
gWindow->page->input_list = list->next;
if (gWindow->page->current_item == list)
gWindow->page->current_item = gWindow->page->input_list;
free_input_item(list, 1);
free(list);
return 1;
}
prev = list;
list = list->next;
}
fprintf(stderr, "Can't delete input item %s\n", name);
return 0;
}