static nserror gui_download_window_data(struct gui_download_window *dw, const char *data, unsigned int size) { APTR va[3]; if(!dw) return NSERROR_SAVE_FAILED; FWrite(dw->fh,data,1,size); dw->downloaded = dw->downloaded + size; va[0] = (APTR)dw->downloaded; va[1] = (APTR)dw->size; va[2] = 0; if(dw->size) { RefreshSetGadgetAttrs((struct Gadget *)dw->objects[GID_STATUS], dw->win, NULL, FUELGAUGE_Level, dw->downloaded, GA_Text, messages_get("amiDownload"), FUELGAUGE_VarArgs, va, TAG_DONE); } else { RefreshSetGadgetAttrs((struct Gadget *)dw->objects[GID_STATUS], dw->win, NULL, FUELGAUGE_Level, dw->downloaded, GA_Text, messages_get("amiDownloadU"), FUELGAUGE_VarArgs, va, TAG_DONE); } return NSERROR_OK; }
static void ami_history_update_extent(struct history_window *hw) { struct IBox *bbox; int width, height; browser_window_history_size(hw->gw->bw, &width, &height); if(ami_gui_get_space_box(hw->objects[GID_BROWSER], &bbox) != NSERROR_OK) { amiga_warn_user("NoMemory", ""); return; } RefreshSetGadgetAttrs((APTR)hw->objects[OID_VSCROLL], hw->win, NULL, GA_ID, OID_VSCROLL, SCROLLER_Total, height, SCROLLER_Visible, bbox->Height, ICA_TARGET, ICTARGET_IDCMP, TAG_DONE); RefreshSetGadgetAttrs((APTR)hw->objects[OID_HSCROLL], hw->win, NULL, GA_ID, OID_HSCROLL, SCROLLER_Total, width, SCROLLER_Visible, bbox->Width, ICA_TARGET, ICTARGET_IDCMP, TAG_DONE); ami_gui_free_space_box(bbox); }
static void myStringArrowDown( Class *cl, Object *obj ) { struct myStringClassData *data; struct Window *win; data = INST_DATA( cl, obj ); win = data->Window; if ( data->ListviewCount == 0 ) { data->ListviewSelected = -1; } else if ( data->ListviewSelected == -1 ) { data->ListviewSelected = 0; } else if ( data->ListviewSelected != data->ListviewCount - 1 ) { data->ListviewSelected++; } RefreshSetGadgetAttrs( (struct Gadget *)data->ListviewObject, win, NULL, LISTBROWSER_Selected, data->ListviewSelected, LISTBROWSER_MakeVisible, data->ListviewSelected, TAG_END ); }
void ami_search_set_forward_state(bool active, void *p) { RefreshSetGadgetAttrs((struct Gadget *)fwin->objects[GID_NEXT], fwin->win, NULL, GA_Disabled, active ? FALSE : TRUE, TAG_DONE); }
BOOL ami_history_event(struct history_window *hw) { /* return TRUE if window destroyed */ ULONG class,result,relevent = 0; uint16 code; struct MenuItem *item; const char *url; struct IBox *bbox; ULONG xs, ys; while((result = RA_HandleInput(hw->objects[OID_MAIN],&code)) != WMHI_LASTMSG) { switch(result & WMHI_CLASSMASK) // class { /* no menus yet, copied in as will probably need it later case WMHI_MENUPICK: item = ItemAddress(gwin->win->MenuStrip,code); while (code != MENUNULL) { ami_menupick(code,gwin); if(win_destroyed) break; code = item->NextSelect; } break; */ case WMHI_MOUSEMOVE: GetAttr(SPACE_AreaBox, hw->objects[GID_BROWSER], (ULONG *)&bbox); GetAttr(SCROLLER_Top, hw->objects[OID_HSCROLL], (ULONG *)&xs); GetAttr(SCROLLER_Top, hw->objects[OID_VSCROLL], (ULONG *)&ys); url = history_position_url(history_current, hw->win->MouseX - bbox->Left + xs, hw->win->MouseY - bbox->Top + ys); RefreshSetGadgetAttrs((APTR)hw->objects[GID_BROWSER], hw->win, NULL, GA_HintInfo, url, TAG_DONE); break; case WMHI_NEWSIZE: ami_history_redraw(hw); break; case WMHI_MOUSEBUTTONS: ami_history_click(hw,code); break; case WMHI_CLOSEWINDOW: ami_history_close(hw); return TRUE; break; } } return FALSE; }
bool ami_print_next_page(void) { ami_print_info.page++; RefreshSetGadgetAttrs((struct Gadget *)ami_print_info.gadgets[GID_STATUS], ami_print_info.win, NULL, FUELGAUGE_Level, ami_print_info.page, TAG_DONE); return true; }
void ami_history_update_extent(struct history_window *hw) { struct IBox *bbox; int width, height; history_size(hw->bw->history, &width, &height); GetAttr(SPACE_AreaBox,hw->objects[GID_BROWSER],(ULONG *)&bbox); RefreshSetGadgetAttrs((APTR)hw->objects[OID_VSCROLL],hw->win,NULL, GA_ID,OID_VSCROLL, SCROLLER_Total,height, SCROLLER_Visible,bbox->Height, // SCROLLER_Top,0, ICA_TARGET,ICTARGET_IDCMP, TAG_DONE); RefreshSetGadgetAttrs((APTR)hw->objects[OID_HSCROLL],hw->win,NULL, GA_ID,OID_HSCROLL, SCROLLER_Total,width, SCROLLER_Visible,bbox->Width, // SCROLLER_Top,0, ICA_TARGET,ICTARGET_IDCMP, TAG_DONE); }
void ami_recreate_listbrowser(struct treeview_window *twin) { static WORD gen=0; SetGadgetAttrs(twin->gadgets[GID_TREEBROWSER],twin->win,NULL, LISTBROWSER_Labels,~0, TAG_DONE); FreeListBrowserList(twin->listbrowser_list); ami_add_elements(twin,twin->tree->root,&gen); RefreshSetGadgetAttrs(twin->gadgets[GID_TREEBROWSER],twin->win,NULL, LISTBROWSER_Labels,twin->listbrowser_list, LISTBROWSER_SelectedNode,selectednode, TAG_DONE); }
static void myStringArrowUp( Class *cl, Object *obj ) { struct myStringClassData *data; struct Window *win; //struct Node *node; //uint32 cnt; data = INST_DATA( cl, obj ); win = data->Window; if ( data->ListviewCount == 0 ) { data->ListviewSelected = -1; goto bailout; } else if (( data->ListviewSelected != -1 ) && ( data->ListviewSelected != 0 )) { data->ListviewSelected--; } RefreshSetGadgetAttrs( (struct Gadget *)data->ListviewObject, win, NULL, LISTBROWSER_Selected, data->ListviewSelected, LISTBROWSER_MakeVisible, data->ListviewSelected, TAG_END ); // cnt = data->ListviewSelected; // node = GetHead( data->SearchHeader ); // // while( cnt-- > 0 ) // { // node = GetSucc( node ); // } // // if ( node ) // { // ISetSuperAttrs( obj, // // TAG_END // ); // } bailout: return; }
static uint32 myStringSearch( Class *cl, Object *obj ) { struct myStringClassData *data; struct Window *win; struct Node *node; struct Node *n; uint32 found; uint32 bufpos; STRPTR searchString; STRPTR compString; found = 0; data = INST_DATA( cl, obj ); win = data->Window; // Remove List and Free Nodes SetGadgetAttrs( (struct Gadget *)data->ListviewObject, win, NULL, LISTBROWSER_Labels, ~0, TAG_END ); while(( node = RemHead( &data->ListviewHeader ))) { FreeListBrowserNode( node ); } GetAttr( STRINGA_BufferPos, obj, &bufpos ); if ( bufpos == 0 ) { goto bailout; } //------------- searchString = strstr(data->SearchBuffer, "://"); if(searchString) { searchString += 3; if (bufpos >= searchString - data->SearchBuffer) bufpos -= searchString - data->SearchBuffer; } else searchString = data->SearchBuffer; node = GetHead( data->SearchHeader ); while( node ) { uint32 srcpos; BOOL possible; possible = FALSE; srcpos = 0; compString = strstr(node->ln_Name, "://"); if(compString) compString += 3; else compString = node->ln_Name; if( 0 == strncasecmp( compString, searchString, bufpos ) ) { // found match after protocol possible = TRUE; } else { // no match after protocol, see if there's a match after www if( 0 == strncasecmp( compString, "www.", 4) ) { // got www, compare it! if( 0 == strncasecmp( &compString[4], searchString, bufpos ) ) possible = TRUE; } } if ( possible == TRUE ) { n = AllocListBrowserNode( 1, LBNA_Column, 0, LBNCA_CopyText, TRUE, LBNCA_Text, node->ln_Name, TAG_END ); if ( n ) { AddTail( &data->ListviewHeader, n ); found++; } } node = GetSucc( node ); } //------------- bailout: data->ListviewCount = found; data->ListviewSelected = -1; // Add List Again RefreshSetGadgetAttrs( (struct Gadget *)data->ListviewObject, win, NULL, LISTBROWSER_Labels, &data->ListviewHeader, LISTBROWSER_Selected, data->ListviewSelected, LISTBROWSER_MakeVisible, 0, TAG_END ); return( found ); }
BOOL ami_search_event(void) { /* return TRUE if window destroyed */ ULONG result; uint16 code; search_flags_t flags; while((result = RA_HandleInput(fwin->objects[OID_MAIN],&code)) != WMHI_LASTMSG) { switch(result & WMHI_CLASSMASK) // class { case WMHI_GADGETUP: switch(result & WMHI_GADGETMASK) { case GID_SEARCHSTRING: browser_window_search_clear(fwin->gwin->bw); RefreshSetGadgetAttrs((struct Gadget *)fwin->objects[GID_PREV], fwin->win, NULL, GA_Disabled, FALSE, TAG_DONE); RefreshSetGadgetAttrs((struct Gadget *)fwin->objects[GID_NEXT], fwin->win, NULL, GA_Disabled, FALSE, TAG_DONE); /* fall through */ case GID_NEXT: search_insert = true; flags = SEARCH_FLAG_FORWARDS | ami_search_flags(); browser_window_search( fwin->gwin->bw, NULL, flags, ami_search_string()); ActivateWindow(fwin->gwin->shared->win); break; case GID_PREV: search_insert = true; flags = ~SEARCH_FLAG_FORWARDS & ami_search_flags(); browser_window_search( fwin->gwin->bw, NULL, flags, ami_search_string()); ActivateWindow(fwin->gwin->shared->win); break; } break; case WMHI_CLOSEWINDOW: ami_search_close(); return TRUE; break; } } return FALSE; }
static void ami_history_redraw(struct history_window *hw) { struct IBox *bbox; ULONG xs,ys; struct redraw_context ctx = { .interactive = true, .background_images = true, .plot = &amiplot }; GetAttr(SCROLLER_Top,hw->objects[OID_HSCROLL],(ULONG *)&xs); GetAttr(SCROLLER_Top,hw->objects[OID_VSCROLL],(ULONG *)&ys); if(ami_gui_get_space_box(hw->objects[GID_BROWSER], &bbox) != NSERROR_OK) { amiga_warn_user("NoMemory", ""); return; } glob = hw->gg; SetRPAttrs(glob->rp, RPTAG_APenColor, 0xffffffff, TAG_DONE); RectFill(glob->rp, 0, 0, bbox->Width - 1, bbox->Height - 1); browser_window_history_redraw_rectangle(hw->gw->bw, xs, ys, bbox->Width + xs, bbox->Height + ys, 0, 0, &ctx); ami_gui_set_default_gg(); ami_clearclipreg(hw->gg); ami_history_update_extent(hw); BltBitMapRastPort(hw->gg->bm, 0, 0, hw->win->RPort, bbox->Left, bbox->Top, bbox->Width, bbox->Height, 0x0C0); ami_gui_free_space_box(bbox); } /* exported interface documented in amiga/history_local.h */ void ami_history_open(struct gui_window *gw) { struct history *history; int width, height; if (gw->bw == NULL) return; history = browser_window_get_history(gw->bw); if (history == NULL) return; if(!gw->hw) { gw->hw = ami_misc_allocvec_clear(sizeof(struct history_window), 0); gw->hw->gg = ami_misc_allocvec_clear(sizeof(struct gui_globals), 0); ami_init_layers(gw->hw->gg, scrn->Width, scrn->Height, false); gw->hw->gw = gw; browser_window_history_size(gw->bw, &width, &height); gw->hw->scrollerhook.h_Entry = (void *)ami_history_scroller_hook; gw->hw->scrollerhook.h_Data = gw->hw; gw->hw->objects[OID_MAIN] = WindowObj, WA_ScreenTitle, ami_gui_get_screen_title(), WA_Title, messages_get("History"), WA_Activate, TRUE, WA_DepthGadget, TRUE, WA_DragBar, TRUE, WA_CloseGadget, TRUE, WA_SizeGadget, TRUE, WA_PubScreen,scrn, WA_InnerWidth,width, WA_InnerHeight,height + 10, WINDOW_SharedPort,sport, WINDOW_UserData,gw->hw, WINDOW_IconifyGadget, FALSE, WINDOW_GadgetHelp, TRUE, WINDOW_Position, WPOS_CENTERSCREEN, WINDOW_HorizProp,1, WINDOW_VertProp,1, WINDOW_IDCMPHook,&gw->hw->scrollerhook, WINDOW_IDCMPHookBits,IDCMP_IDCMPUPDATE, // WA_ReportMouse,TRUE, WA_IDCMP,IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE, // | IDCMP_MOUSEMOVE, WINDOW_ParentGroup, gw->hw->objects[GID_MAIN] = LayoutVObj, LAYOUT_AddChild, gw->hw->objects[GID_BROWSER] = SpaceObj, GA_ID,GID_BROWSER, // SPACE_MinWidth,width, // SPACE_MinHeight,height, SpaceEnd, EndGroup, EndWindow; gw->hw->win = (struct Window *)RA_OpenWindow(gw->hw->objects[OID_MAIN]); gw->hw->node = AddObject(window_list,AMINS_HISTORYWINDOW); gw->hw->node->objstruct = gw->hw; GetAttr(WINDOW_HorizObject,gw->hw->objects[OID_MAIN],(ULONG *)&gw->hw->objects[OID_HSCROLL]); GetAttr(WINDOW_VertObject,gw->hw->objects[OID_MAIN],(ULONG *)&gw->hw->objects[OID_VSCROLL]); RefreshSetGadgetAttrs((APTR)gw->hw->objects[OID_VSCROLL],gw->hw->win,NULL, GA_ID,OID_VSCROLL, SCROLLER_Top,0, ICA_TARGET,ICTARGET_IDCMP, TAG_DONE); RefreshSetGadgetAttrs((APTR)gw->hw->objects[OID_HSCROLL],gw->hw->win,NULL, GA_ID,OID_HSCROLL, SCROLLER_Top,0, ICA_TARGET,ICTARGET_IDCMP, TAG_DONE); } ami_history_redraw(gw->hw); } /** * Handle mouse clicks in the history window. * * \return true if the event was handled, false to pass it on */ static bool ami_history_click(struct history_window *hw, uint16 code) { int x, y; struct IBox *bbox; ULONG xs, ys; if(ami_gui_get_space_box(hw->objects[GID_BROWSER], &bbox) != NSERROR_OK) { amiga_warn_user("NoMemory", ""); return false; } GetAttr(SCROLLER_Top,hw->objects[OID_HSCROLL],(ULONG *)&xs); x = hw->win->MouseX - bbox->Left +xs; GetAttr(SCROLLER_Top,hw->objects[OID_VSCROLL],(ULONG *)&ys); y = hw->win->MouseY - bbox->Top + ys; ami_gui_free_space_box(bbox); switch(code) { case SELECTUP: browser_window_history_click(hw->gw->bw, x, y, false); ami_history_redraw(hw); ami_schedule_redraw(hw->gw->shared, true); break; case MIDDLEUP: browser_window_history_click(hw->gw->bw, x, y, true); ami_history_redraw(hw); break; } return true; }
void ami_drag_selection(struct selection *s) { struct box *text_box; int x; int y; char *utf8text; struct ami_text_selection *sel; struct IFFHandle *old_iffh = iffh; struct gui_window_2 *gwin = ami_window_at_pointer(AMINS_WINDOW); if(!gwin) { DisplayBeep(scrn); return; } x = gwin->win->MouseX; y = gwin->win->MouseY; if(text_box = ami_text_box_at_point(gwin, (ULONG *)&x, (ULONG *)&y)) { ami_utf8_clipboard = true; iffh = ami_clipboard_init_internal(1); if(gui_copy_to_clipboard(s)) { browser_window_mouse_click(gwin->bw, BROWSER_MOUSE_PRESS_1, x, y); browser_window_key_press(gwin->bw, KEY_PASTE); } ami_clipboard_free_internal(iffh); iffh = old_iffh; ami_utf8_clipboard = false; } else { x = gwin->win->MouseX; y = gwin->win->MouseY; if(ami_gadget_hit(gwin->objects[GID_URL], x, y)) { if(sel = ami_selection_to_text(gwin)) { utf8text = ami_utf8_easy(sel->text); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_URL], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); FreeVec(sel); ami_utf8_free(utf8text); } } else if(ami_gadget_hit(gwin->objects[GID_SEARCHSTRING], x, y)) { if(sel = ami_selection_to_text(gwin)) { utf8text = ami_utf8_easy(sel->text); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_SEARCHSTRING], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); FreeVec(sel); ami_utf8_free(utf8text); } } else { DisplayBeep(scrn); } } }
void ami_history_open(struct browser_window *bw, struct history *history) { int width, height; struct IBox *bbox; assert(history); history_current = history; if(!hwindow) { hwindow = AllocVec(sizeof(struct history_window),MEMF_CLEAR | MEMF_PRIVATE); ami_init_layers(&hwindow->gg, scrn->Width, scrn->Height); hwindow->bw = bw; history_size(history, &width, &height); hwindow->scrollerhook.h_Entry = (void *)ami_history_scroller_hook; hwindow->scrollerhook.h_Data = hwindow; hwindow->objects[OID_MAIN] = WindowObject, WA_ScreenTitle,nsscreentitle, WA_Title,messages_get("History"), WA_Activate, TRUE, WA_DepthGadget, TRUE, WA_DragBar, TRUE, WA_CloseGadget, TRUE, WA_SizeGadget, TRUE, WA_CustomScreen,scrn, WA_InnerWidth,width, WA_InnerHeight,height + 10, WINDOW_SharedPort,sport, WINDOW_UserData,hwindow, WINDOW_IconifyGadget, FALSE, WINDOW_GadgetHelp, TRUE, WINDOW_Position, WPOS_CENTERSCREEN, WINDOW_HorizProp,1, WINDOW_VertProp,1, WINDOW_IDCMPHook,&hwindow->scrollerhook, WINDOW_IDCMPHookBits,IDCMP_IDCMPUPDATE, // WA_ReportMouse,TRUE, WA_IDCMP,IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE, // | IDCMP_MOUSEMOVE, WINDOW_ParentGroup, hwindow->objects[GID_MAIN] = VGroupObject, LAYOUT_AddChild, hwindow->objects[GID_BROWSER] = SpaceObject, GA_ID,GID_BROWSER, // SPACE_MinWidth,width, // SPACE_MinHeight,height, SpaceEnd, EndGroup, EndWindow; hwindow->win = (struct Window *)RA_OpenWindow(hwindow->objects[OID_MAIN]); // hwindow->bw->window = hwindow; hwindow->node = AddObject(window_list,AMINS_HISTORYWINDOW); hwindow->node->objstruct = hwindow; GetAttr(WINDOW_HorizObject,hwindow->objects[OID_MAIN],(ULONG *)&hwindow->objects[OID_HSCROLL]); GetAttr(WINDOW_VertObject,hwindow->objects[OID_MAIN],(ULONG *)&hwindow->objects[OID_VSCROLL]); RefreshSetGadgetAttrs((APTR)hwindow->objects[OID_VSCROLL],hwindow->win,NULL, GA_ID,OID_VSCROLL, SCROLLER_Top,0, ICA_TARGET,ICTARGET_IDCMP, TAG_DONE); RefreshSetGadgetAttrs((APTR)hwindow->objects[OID_HSCROLL],hwindow->win,NULL, GA_ID,OID_HSCROLL, SCROLLER_Top,0, ICA_TARGET,ICTARGET_IDCMP, TAG_DONE); } hwindow->bw = bw; bw->window->hw = hwindow; ami_history_redraw(hwindow); }
void ami_drag_selection(struct gui_window *g) { int x; int y; char *utf8text; char *sel; struct IFFHandle *old_iffh = iffh; struct gui_window_2 *gwin = ami_window_at_pointer(AMINS_WINDOW); /* NB: 'gwin' is at the drop point, 'g' is where the selection was dragged from. * These may be different if the selection has been dragged between windows. */ if(!gwin) { DisplayBeep(scrn); return; } x = gwin->win->MouseX; y = gwin->win->MouseY; if(ami_text_box_at_point(gwin, (ULONG *)&x, (ULONG *)&y)) { iffh = ami_clipboard_init_internal(1); browser_window_key_press(g->shared->bw, KEY_COPY_SELECTION); browser_window_mouse_click(gwin->bw, BROWSER_MOUSE_PRESS_1, x, y); browser_window_key_press(gwin->bw, KEY_PASTE); ami_clipboard_free_internal(iffh); iffh = old_iffh; } else { x = gwin->win->MouseX; y = gwin->win->MouseY; if(ami_gadget_hit(gwin->objects[GID_URL], x, y)) { if(sel = browser_window_get_selection(g->shared->bw)) { utf8text = ami_utf8_easy(sel); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_URL], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); free(sel); ami_utf8_free(utf8text); } } else if(ami_gadget_hit(gwin->objects[GID_SEARCHSTRING], x, y)) { if(sel = browser_window_get_selection(g->shared->bw)) { utf8text = ami_utf8_easy(sel); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_SEARCHSTRING], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); free(sel); ami_utf8_free(utf8text); } } else { DisplayBeep(scrn); } } }