Merge branch 'ct' of git.pipapo.org:cinelerra-ct into ct
[cinelerra_cv/ct.git] / guicast / filesystem.h
blob82e2fde65f3046e24919e97f8ed9aceae6b3d7f3
1 #ifndef FILESYSTEM_H
2 #define FILESYSTEM_H
4 #include "arraylist.h"
5 #include "bcwindowbase.inc"
6 #include "sizes.h"
8 class FileItem
10 public:
11 FileItem();
12 FileItem(char *path,
13 char *name,
14 int is_dir,
15 int64_t size,
16 int month,
17 int day,
18 int year,
19 int64_t calendar_time);
20 ~FileItem();
22 int set_path(char *path);
23 int set_name(char *name);
24 int reset();
25 char *path;
26 char *name;
27 int is_dir;
28 int64_t size;
29 int month;
30 int day;
31 int year;
32 int64_t calendar_time;
35 class FileSystem
37 public:
38 // sets the working directory to the user
39 FileSystem();
40 virtual ~FileSystem();
42 // Load the new directory and change current_dir to it.
43 // This does not complete the dir path.
44 // If any of the files failed to stat, it returns nonzero.
45 int update(char *new_dir = 0);
47 // Complete the path in the string and change to the directory in the string.
48 // Does not change new_dir
49 int change_dir(char *new_dir);
50 // Set the current_dir to something without completing the path.
51 int set_current_dir(char *new_dir);
53 int move_up();
54 char *get_current_dir();
55 // Syntax of filter is
56 // single filter without [].
57 // multiple filters enclosed in [].
58 int set_filter(char *new_filter);
59 int set_show_all(); // show hidden files
60 int set_want_directory();
61 int set_sort_order(int value);
62 int set_sort_field(int field);
63 int create_dir(char *new_dir_); // create a new directory
64 int complete_path(char *filename); // use the filename and the current_dir to create a complete filename
65 // return 1 if the text is a directory
66 int is_dir(const char *new_dir_);
67 int extract_dir(char *out, const char *in); // extract the directory from the path
68 int extract_name(char *out, const char *in, int test_dir = 1); // extract the name from the path
69 int join_names(char *out, char *dir_in, char *name_in); // combine a directory and filename
70 static int64_t get_date(char *filename); // get the date of the filename modification
71 static int64_t get_size(char *filename); // Get the number of bytes in the file.
72 int add_end_slash(char *new_dir);
73 int total_files();
74 FileItem* get_entry(int entry);
76 int parse_tildas(char *new_dir); // expand tildas
77 int parse_directories(char *new_dir); // add directories
78 int parse_dots(char *new_dir); // move up directory tree after expanding tildas
80 // Alphabetize all the directories and files. By default
81 // directories come first.
82 void alphabetize();
84 // Array of files and directories in the directory pointed to by current_dir.
85 // Directories are first.
86 ArrayList<FileItem*> dir_list;
88 // Sorting order and sorting field. These are identical in BC_ListBox.
89 enum
91 SORT_ASCENDING,
92 SORT_DESCENDING
95 // Match column definitions in BC_FileBox.
96 enum
98 SORT_PATH,
99 SORT_SIZE,
100 SORT_DATE,
101 SORT_EXTENSION
104 private:
105 int dot_reverse_filename(char *out, const char *in);
106 int compare_items(ArrayList<FileItem*> *dir_list, int item1, int item2);
107 int sort_table(ArrayList<FileItem*> *dir_list);
110 // Combine the directories and files into the master list, directories first.
111 int combine(ArrayList<FileItem*> *dir_list, ArrayList<FileItem*> *file_list);
112 // Return whether or not the string is the root directory.
113 int is_root_dir(char *path);
114 // Whether or not the file passes the current filter.
115 int test_filter(FileItem *file);
116 int reset_parameters();
117 int delete_directory();
118 char filter[BCTEXTLEN]; // what filenames have to end in to get displayed
119 int want_directory;
120 int show_all_files; // shows . files
121 char current_dir[BCTEXTLEN];
122 char string[BCTEXTLEN], string2[BCTEXTLEN];
123 int sort_order;
124 int sort_field;
127 #endif
129 // Local Variables:
130 // mode: C++
131 // c-file-style: "linux"
132 // End: