void ami_move_node(struct treeview_window *twin,int move) { struct Node *lbnode = NULL; struct node *treenode,*moveto; bool before; GetAttr(LISTBROWSER_SelectedNode,twin->gadgets[GID_TREEBROWSER],(ULONG *)&lbnode); if(!lbnode) return; GetListBrowserNodeAttrs(lbnode, LBNA_UserData,(ULONG *)&treenode, // for multiselects? LBNA_Selected,(BOOL *)&sel, TAG_DONE); selectednode2 = treenode; tree_set_node_selected(twin->tree,twin->tree->root,false); tree_set_node_selected(twin->tree,treenode,true); switch(move) { case AMI_MOVE_UP: moveto = treenode->previous; before = true; break; case AMI_MOVE_DOWN: moveto = treenode->next; before = false; break; case AMI_MOVE_OUT: moveto = treenode->parent->previous; before = false; break; } if(!moveto) return; tree_delink_node(treenode); //tree_move_selected_nodes(twin->tree,moveto,before); tree_link_node(moveto,treenode,before); ami_recreate_listbrowser(twin); selectednode2 = NULL; }
void ami_new_bookmark(struct treeview_window *twin) { const struct url_data *data; struct Node *lbnode; struct node *treenode; char *url,*title; GetAttr(LISTBROWSER_SelectedNode,twin->gadgets[GID_TREEBROWSER],(ULONG *)&lbnode); if(lbnode) { GetListBrowserNodeAttrs(lbnode, LBNA_UserData,(ULONG *)&treenode, TAG_DONE); } else { treenode = twin->tree->root; } url = (char *)strdup("http://www.netsurf-browser.org"); data = urldb_get_url_data(url); if (!data) { urldb_add_url(url); urldb_set_url_persistence(url,true); data = urldb_get_url_data(url); } if (data) { title = data->title; tree_create_URL_node(treenode,url,data,title); ami_recreate_listbrowser(twin); } }
static uint32 myStringClass_GM_HandleInput( Class *cl, Object *obj, struct gpInput *msg ) { struct myStringClassData *data; struct Gadget *gad; uint32 retval; data = INST_DATA( cl, obj ); gad = (struct Gadget *)obj; //IDoMethod( data->ListviewObject, (APTR)msg ); if (( gad->Flags & GFLG_SELECTED ) == 0 ) { return( GMR_NOREUSE ); } switch( msg->gpi_IEvent->ie_Class ) { case IECLASS_RAWKEY: { switch( msg->gpi_IEvent->ie_Code ) { case 0x48: // Page Up (DownKey) case 0x4c: // Up Arrow (DownKey) { myStringArrowUp( cl, obj ); retval = GMR_MEACTIVE; break; } case 0x49: // Page Down (DownKey) case 0x4d: // Down Arrow (DownKey) { myStringArrowDown( cl, obj ); retval = GMR_MEACTIVE; break; } // case 70: // Del // case 65: // Backspace // { // myStringCloseListview( cl, obj ); // // retval = IDoSuperMethodA( cl, obj, (APTR)msg ); // break; // } case 68: // Return { // If listview open, and an item is selected, copy selected node's text to the string gadget if( data->Window != NULL && data->ListviewCount > 0 ) { struct Node *selected = NULL; STRPTR pText; GetAttr( LISTBROWSER_SelectedNode, data->ListviewObject, (uint32 *) ( &selected ) ); if( selected != NULL ) { GetListBrowserNodeAttrs( selected, LBNA_Column, 0, LBNCA_Text, &pText, TAG_END ); SetGadgetAttrs( (struct Gadget *)obj, data->Window, NULL, STRINGA_TextVal, pText, TAG_DONE ); } } retval = IDoSuperMethodA( cl, obj, (APTR)msg ); break; } default: { uint32 oldpos; uint32 newpos; GetAttr( STRINGA_BufferPos, obj, &oldpos ); retval = IDoSuperMethodA( cl, obj, (APTR)msg ); GetAttr( STRINGA_BufferPos, obj, &newpos ); if ( oldpos != newpos ) { if ( myStringSearch( cl, obj )) { // Atleast one entry found, open window if not open if ( data->Window == NULL ) { myStringOpenListview( cl, obj, msg ); } } else { // No matches, migth aswell close the window myStringCloseListview( cl, obj ); } } break; } } myStringHandleListview( cl, obj ); break; } case IECLASS_MOUSEWHEEL: { struct InputEvent *ie = msg->gpi_IEvent; if ( ie->ie_Y < 0 ) { myStringArrowUp( cl, obj ); } else if ( ie->ie_Y > 0 ) { myStringArrowDown( cl, obj ); } myStringHandleListview( cl, obj ); retval = GMR_MEACTIVE; break; } default: { retval = IDoSuperMethodA( cl, obj, (APTR)msg ); break; } } return( retval ); }
BOOL ami_tree_event(struct treeview_window *twin) { /* return TRUE if window destroyed */ ULONG class,result,relevent = 0; ULONG column; uint16 code; struct MenuItem *item; struct node *treenode; struct Node *lbnode; struct node_element *element; char *text; // ULONG editcols[] = {TREE_ELEMENT_TITLE,TREE_ELEMENT_URL}; static WORD gen=0; while((result = RA_HandleInput(twin->objects[OID_MAIN],&code)) != WMHI_LASTMSG) { switch(result & WMHI_CLASSMASK) // class { case WMHI_GADGETUP: switch(result & WMHI_GADGETMASK) { case GID_TREEBROWSER: GetAttrs(twin->gadgets[GID_TREEBROWSER], LISTBROWSER_RelEvent,&relevent, TAG_DONE); switch(relevent) { case LBRE_DOUBLECLICK: GetAttr(LISTBROWSER_SelectedNode,twin->gadgets[GID_TREEBROWSER],(ULONG *)&lbnode); GetListBrowserNodeAttrs(lbnode, LBNA_UserData,(ULONG *)&treenode, TAG_DONE); ami_tree_launch_node(twin->tree,treenode); break; case LBRE_EDIT: GetAttrs(twin->gadgets[GID_TREEBROWSER], LISTBROWSER_SelectedNode,(ULONG *)&lbnode, // LISTBROWSER_RelColumn,(ULONG *)&column, TAG_DONE); GetListBrowserNodeAttrs(lbnode, LBNA_UserData,(ULONG *)&treenode, TAG_DONE); element = tree_find_element(treenode,TREE_ELEMENT_TITLE); GetListBrowserNodeAttrs(lbnode, LBNA_Column,column, LBNCA_Text,(ULONG *)&text, TAG_DONE); element->text = (char *)strdup(text); tree_handle_node_element_changed(twin->tree, element); break; case LBRE_HIDECHILDREN: GetAttr(LISTBROWSER_SelectedNode,twin->gadgets[GID_TREEBROWSER],(ULONG *)&lbnode); GetListBrowserNodeAttrs(lbnode, LBNA_UserData,(ULONG *)&treenode, TAG_DONE); tree_set_node_expanded(twin->tree, treenode, false); break; case LBRE_SHOWCHILDREN: GetAttr(LISTBROWSER_SelectedNode,twin->gadgets[GID_TREEBROWSER],(ULONG *)&lbnode); GetListBrowserNodeAttrs(lbnode, LBNA_UserData,(ULONG *)&treenode, TAG_DONE); tree_set_node_expanded(twin->tree, treenode, true); break; } break; case GID_OPEN: GetAttr(LISTBROWSER_SelectedNode,twin->gadgets[GID_TREEBROWSER],(ULONG *)&lbnode); GetListBrowserNodeAttrs(lbnode, LBNA_UserData,(ULONG *)&treenode, TAG_DONE); ami_tree_launch_node(twin->tree,treenode); break; case GID_NEWF: GetAttr(LISTBROWSER_SelectedNode,twin->gadgets[GID_TREEBROWSER],(ULONG *)&lbnode); if(lbnode) { GetListBrowserNodeAttrs(lbnode, LBNA_UserData,(ULONG *)&treenode, TAG_DONE); } else { treenode = twin->tree->root; } tree_create_folder_node(treenode,(char *)messages_get("TreeNewFolder")); ami_recreate_listbrowser(twin); break; case GID_NEWB: ami_new_bookmark(twin); break; case GID_UP: ami_move_node(twin,AMI_MOVE_UP); break; case GID_DOWN: ami_move_node(twin,AMI_MOVE_DOWN); break; case GID_LEFT: ami_move_node(twin,AMI_MOVE_OUT); break; case GID_DEL: GetAttr(LISTBROWSER_SelectedNode,twin->gadgets[GID_TREEBROWSER],(ULONG *)&lbnode); GetListBrowserNodeAttrs(lbnode, LBNA_UserData,(ULONG *)&treenode, TAG_DONE); tree_delete_node(twin->tree, treenode, false); /* We are recreating the list from scratch as there is no obvious easy way to delete children from a listbrowser list */ ami_recreate_listbrowser(twin); break; } break; /* 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_CLOSEWINDOW: ami_tree_close(twin); return TRUE; break; } } return FALSE; }