void FileModel::refresh() { if (!m_active) { m_dirty = true; return; } refreshEntries(); m_dirty = false; }
void DlgFileSelect::idle(void) { if (reloaddir || refreshentries) { refreshEntries(); } /* Force redraw ? */ if (redraw) { init(); redraw = false; } }
int DlgFileSelect::processDialog(void) { int retval = Dialog::GUI_CONTINUE; switch (return_obj) { case SGFSDLG_UPDIR: /* Change path to parent directory */ if (strlen(file_path) > 2) { File_CleanFileName(file_path); char *ptr = strrchr(file_path, '/'); if (ptr) *(ptr + 1) = 0; File_AddSlashToEndFileName(file_path); reloaddir = true; /* Copy the path name to the dialog */ File_ShrinkName(dlgpath, file_path, sizeof(dlgpath)-1); /* Remove old selection */ selection = -1; file_fname[0] = 0; dlgfname[0] = 0; ypos = 0; } break; case SGFSDLG_ROOTDIR: /* Change to root directory */ strcpy(file_path, "/"); reloaddir = true; strcpy(dlgpath, file_path); /* Remove old selection */ selection = -1; file_fname[0] = 0; dlgfname[0] = 0; ypos = 0; break; case SGFSDLG_UP: /* Scroll up */ if (ypos > 0) { --ypos; refreshentries = true; } break; case SGFSDLG_DOWN: /* Scroll down */ if (eol == false) { ++ypos; refreshentries = true; } break; case SGFSDLG_OKAY: pressed_ok = true; confirm(); // passthrough case SGFSDLG_CANCEL: retval = Dialog::GUI_CLOSE; break; default: break; } /* Has the user clicked on a file or folder? */ if ((return_obj >= SGFSDLG_FIRSTENTRY) && (return_obj <= SGFSDLG_LASTENTRY)) { char tempstr[MAX_FILENAME_LENGTH]; struct stat filestat; struct listentry *temp = gui_file_list; int i; strcpy(tempstr, file_path); for (i = 0; i < ((return_obj - SGFSDLG_FIRSTENTRY) + ypos); i++) temp = temp->next; strcat(tempstr, temp->filename); if (stat(tempstr, &filestat) == 0 && S_ISDIR(filestat.st_mode)) { /* Set the new directory */ strcpy(file_path, tempstr); if (strlen(file_path) >= 3) { if ((file_path[strlen(file_path) - 2] == '/') && (file_path[strlen(file_path) - 1] == '.')) { /* Strip a single dot at the end of the path name */ file_path[strlen(file_path) - 2] = 0; } if ((file_path[strlen(file_path) - 3] == '/') && (file_path[strlen(file_path) - 2] == '.') && (file_path[strlen(file_path) - 1] == '.')) { /* Handle the ".." folder */ char *ptr; if (strlen(file_path) == 3) { file_path[1] = 0; } else { file_path[strlen(file_path) - 3] = 0; ptr = strrchr(file_path, '/'); if (ptr) *(ptr + 1) = 0; } } } File_AddSlashToEndFileName(file_path); reloaddir = true; /* Copy the path name to the dialog */ File_ShrinkName(dlgpath, file_path, sizeof(dlgpath)-1); selection = -1; /* Remove old selection */ // gui_file_fname[0] = 0; dlgfname[0] = 0; ypos = 0; } else { /* Select a file */ selection = return_obj - SGFSDLG_FIRSTENTRY + ypos; strcpy(file_fname, temp->filename); File_ShrinkName(dlgfname, file_fname, sizeof(dlgfname)-1); } } if (reloaddir || refreshentries) { refreshEntries(); } return retval; }