00001 #ifndef FILESYSTEM_H
00002 #define FILESYSTEM_H
00003
00004 #include "arraylist.h"
00005 #include "bcwindowbase.inc"
00006 #include "sizes.h"
00007
00008 class FileItem
00009 {
00010 public:
00011 FileItem();
00012 FileItem(char *path,
00013 char *name,
00014 int is_dir,
00015 int64_t size,
00016 int month,
00017 int day,
00018 int year,
00019 int64_t calendar_time);
00020 ~FileItem();
00021
00022 int set_path(char *path);
00023 int set_name(char *name);
00024 int reset();
00025 char *path;
00026 char *name;
00027 int is_dir;
00028 int64_t size;
00029 int month;
00030 int day;
00031 int year;
00032 int64_t calendar_time;
00033 };
00034
00035 class FileSystem
00036 {
00037 public:
00038
00039 FileSystem();
00040 virtual ~FileSystem();
00041
00042
00043
00044
00045 int update(char *new_dir = 0);
00046
00047
00048
00049 int change_dir(char *new_dir);
00050
00051 int set_current_dir(char *new_dir);
00052
00053 int move_up();
00054 char *get_current_dir();
00055
00056
00057
00058 int set_filter(char *new_filter);
00059 int set_show_all();
00060 int set_want_directory();
00061 int set_sort_order(int value);
00062 int set_sort_field(int field);
00063 int create_dir(char *new_dir_);
00064 int complete_path(char *filename);
00065 int is_dir(const char *new_dir_);
00066 int extract_dir(char *out, const char *in);
00067 int extract_name(char *out, const char *in, int test_dir = 1);
00068 int join_names(char *out, char *dir_in, char *name_in);
00069 long get_date(char *filename);
00070 static int64_t get_size(char *filename);
00071 int add_end_slash(char *new_dir);
00072 int total_files();
00073 FileItem* get_entry(int entry);
00074
00075 int parse_tildas(char *new_dir);
00076 int parse_directories(char *new_dir);
00077 int parse_dots(char *new_dir);
00078
00079
00080
00081 void alphabetize();
00082
00083
00084
00085 ArrayList<FileItem*> dir_list;
00086
00087
00088 enum
00089 {
00090 SORT_ASCENDING,
00091 SORT_DESCENDING
00092 };
00093
00094
00095 enum
00096 {
00097 SORT_PATH,
00098 SORT_SIZE,
00099 SORT_DATE,
00100 SORT_EXTENSION
00101 };
00102
00103 private:
00104 int dot_reverse_filename(char *out, const char *in);
00105 int compare_items(ArrayList<FileItem*> *dir_list, int item1, int item2);
00106 int sort_table(ArrayList<FileItem*> *dir_list);
00107
00108
00109
00110 int combine(ArrayList<FileItem*> *dir_list, ArrayList<FileItem*> *file_list);
00111
00112 int is_root_dir(char *path);
00113
00114 int test_filter(FileItem *file);
00115 int reset_parameters();
00116 int delete_directory();
00117 char filter[BCTEXTLEN];
00118 int want_directory;
00119 int show_all_files;
00120 char current_dir[BCTEXTLEN];
00121 char string[BCTEXTLEN], string2[BCTEXTLEN];
00122 int sort_order;
00123 int sort_field;
00124 };
00125
00126 #endif