#include #include #include #include #include #include #include #include #include #include "pickfile.h" #include "directory.h" window_t *save_window; int save_done = 0; int dir_only_func(struct item_info *d) { return (d->de.d_type == DT_DIR); } int save_file_picker() { event_t ev; button_t *save, *open, *cancel; editline_t *name; char *fName; int focus = 0; save_window = yzNewWindow("File Saver", 400, 340); yzSelectWindow(save_window); yzPenColor(55000, 55000, 55000); yzClear(); open = yzAddButton("Open", 275, 300, 75, 20, 1); save = yzAddButton("Save", 162, 300, 76, 20, 3); cancel = yzAddButton("Cancel", 50, 300, 75, 20, 2); name = yzAddEditline(pickerName, 100, 260, 280, 20, 1, YZ_EDITLINE_RETURN | YZ_EDITLINE_ENTER | YZ_EDITLINE_TAB); dir_selectable_handler(dir_only_func); deselect_dir(); yzSelectEditline(name, 0, -1); focus = 0; yzPenColor(0, 0, 0); yzText(20, 22, pickerPrompt); yzText(20, 275, "File name:"); switch_to_directory(pickerDir); while(!save_done) { ev = yzGetEvent(200); if(focus && yzGetSelectedEditline()==name) { focus = 0; deselect_dir(); } if(!focus)yzFlashCaret(); switch(ev.type) { case YZ_BUTTON_HIT: switch(ev.button) { case 1: // ok open_selection(); break; case 3: // save do_save: fName = yzGetEditlineText(name); pickerFile = malloc(strlen(pickerDir) + strlen(fName) + 2); strcpy(pickerFile, pickerDir); if(pickerFile[strlen(pickerFile)-1] != '/') strcat(pickerFile, "/"); strcat(pickerFile, fName); save_done = 1; break; case 2: // cancel canc: pickerFile = "/../cancel"; save_done = 1; break; } break; case YZ_KEY_DOWN: if(ev.key == 27)goto canc; if(ev.key=='\n' || ev.key==3) if(focus==0)goto do_save; if(ev.key==' ') { focus = !focus; if(!focus) { yzSelectEditline(name, 0, -1); deselect_dir(); } else { select_dir(); yzDeselectEditline(name); } } else directory_key(ev.key); break; case YZ_MOUSE_DOWN: if(!focus) { focus = 1; select_dir(); yzDeselectEditline(name); } directory_click(ev.x, ev.y); break; } } yzRemoveButton(open); yzRemoveButton(save); yzRemoveButton(cancel); yzRemoveEditline(name); yzDeleteWindow(save_window); }