batchrender hang on close, apply pref saves defaults, overwrite/splice tweaks, specif...
[goodguy/history.git] / cinelerra-5.1 / guicast / bcfilebox.h
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #ifndef BCFILEBOX_H
23 #define BCFILEBOX_H
24
25 #include "bcbutton.h"
26 #include "bcdelete.inc"
27 #include "bcfilebox.inc"
28 #include "bclistbox.inc"
29 #include "bclistboxitem.inc"
30 #include "bcnewfolder.inc"
31 #include "bcrename.inc"
32 #include "bcresources.inc"
33 #include "bctextbox.h"
34 #include "bcwindow.h"
35 #include "condition.inc"
36 #include "filesystem.inc"
37 #include "mutex.inc"
38 #include "thread.h"
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 class BC_FileBoxListBox : public BC_ListBox
56 {
57 public:
58         BC_FileBoxListBox(int x, int y, BC_FileBox *filebox);
59         virtual ~BC_FileBoxListBox();
60
61         int handle_event();
62         int selection_changed();
63         int column_resize_event();
64         int sort_order_event();
65         int move_column_event();
66         int evaluate_query(char *string);
67
68         BC_FileBox *filebox;
69 };
70
71 class BC_FileBoxTextBox : public BC_TextBox
72 {
73 public:
74         BC_FileBoxTextBox(int x, int y, BC_FileBox *filebox);
75         ~BC_FileBoxTextBox();
76
77         int handle_event();
78         BC_FileBox *filebox;
79 };
80
81 class BC_FileBoxUseThis : public BC_Button
82 {
83 public:
84         BC_FileBoxUseThis(BC_FileBox *filebox);
85         ~BC_FileBoxUseThis();
86         int handle_event();
87
88         BC_FileBox *filebox;
89 };
90
91 class BC_FileBoxOK : public BC_OKButton
92 {
93 public:
94         BC_FileBoxOK(BC_FileBox *filebox);
95         ~BC_FileBoxOK();
96
97         int handle_event();
98
99         BC_FileBox *filebox;
100 };
101
102 class BC_FileBoxCancel : public BC_CancelButton
103 {
104 public:
105         BC_FileBoxCancel(BC_FileBox *filebox);
106         ~BC_FileBoxCancel();
107
108         int handle_event();
109
110         BC_FileBox *filebox;
111 };
112
113 class BC_FileBoxText : public BC_Button
114 {
115 public:
116         BC_FileBoxText(int x, int y, BC_FileBox *filebox);
117         int handle_event();
118         BC_FileBox *filebox;
119 };
120
121 class BC_FileBoxDirectoryText : public BC_TextBox
122 {
123 public:
124         BC_FileBoxDirectoryText(int x, int y, BC_FileBox *filebox);
125         int handle_event();
126         BC_FileBox *filebox;
127 };
128
129 class BC_FileBoxFilterText : public BC_TextBox
130 {
131 public:
132         BC_FileBoxFilterText(int x, int y, BC_FileBox *filebox);
133         int handle_event();
134         BC_FileBox *filebox;
135 };
136
137 class BC_FileBoxFilterMenu : public BC_ListBox
138 {
139 public:
140         BC_FileBoxFilterMenu(int x, int y, BC_FileBox *filebox);
141         int handle_event();
142         BC_FileBox *filebox;
143 };
144
145 class BC_FileBoxIcons : public BC_Button
146 {
147 public:
148         BC_FileBoxIcons(int x, int y, BC_FileBox *filebox);
149         int handle_event();
150         BC_FileBox *filebox;
151 };
152
153 class BC_FileBoxNewfolder : public BC_Button
154 {
155 public:
156         BC_FileBoxNewfolder(int x, int y, BC_FileBox *filebox);
157         int handle_event();
158         BC_FileBox *filebox;
159 };
160
161 class BC_FileBoxRename : public BC_Button
162 {
163 public:
164         BC_FileBoxRename(int x, int y, BC_FileBox *filebox);
165         int handle_event();
166         BC_FileBox *filebox;
167 };
168
169 class BC_FileBoxUpdir : public BC_Button
170 {
171 public:
172         BC_FileBoxUpdir(int x, int y, BC_FileBox *filebox);
173         int handle_event();
174         BC_FileBox *filebox;
175         char string[BCTEXTLEN];
176 };
177
178 class BC_FileBoxDelete : public BC_Button
179 {
180 public:
181         BC_FileBoxDelete(int x, int y, BC_FileBox *filebox);
182         int handle_event();
183         BC_FileBox *filebox;
184 };
185
186 class BC_FileBoxReload : public BC_Button
187 {
188 public:
189         BC_FileBoxReload(int x, int y, BC_FileBox *filebox);
190         int handle_event();
191         BC_FileBox *filebox;
192 };
193
194 class BC_FileBoxSizeFormat : public BC_Button
195 {
196 public:
197         BC_FileBoxSizeFormat(int x, int y, BC_FileBox *file_box);
198         ~BC_FileBoxSizeFormat();
199
200         int handle_event();
201         BC_FileBox *file_box;
202 };
203
204
205 class BC_FileBoxRecent : public BC_ListBox
206 {
207 public:
208         BC_FileBoxRecent(BC_FileBox *filebox, int x, int y);
209         int handle_event();
210         BC_FileBox *filebox;
211 };
212
213
214
215
216 class BC_FileBox : public BC_Window
217 {
218 public:
219         BC_FileBox(int x,
220                 int y,
221                 const char *init_path,
222                 const char *title,
223                 const char *caption,
224 // Set to 1 to get hidden files.
225                 int show_all_files = 0,
226 // Want only directories
227                 int want_directory = 0,
228                 int multiple_files = 0,
229                 int h_padding = -1);
230         virtual ~BC_FileBox();
231
232         friend class BC_FileBoxCancel;
233         friend class BC_FileBoxDirectoryText;
234         friend class BC_FileBoxListBox;
235         friend class BC_FileBoxTextBox;
236         friend class BC_FileBoxText;
237         friend class BC_FileBoxIcons;
238         friend class BC_FileBoxNewfolder;
239         friend class BC_NewFolderThread;
240         friend class BC_FileBoxRename;
241         friend class BC_RenameThread;
242         friend class BC_FileBoxOK;
243         friend class BC_FileBoxUpdir;
244         friend class BC_FileBoxFilterText;
245         friend class BC_FileBoxFilterMenu;
246         friend class BC_FileBoxUseThis;
247         friend class BC_DeleteThread;
248         friend class BC_FileBoxDelete;
249         friend class BC_FileBoxReload;
250         friend class BC_FileBoxRecent;
251         friend class BC_FileBoxSizeFormat;
252
253         virtual void create_objects();
254         virtual int keypress_event();
255         virtual int close_event();
256 // When file is submitted this is called for the user to retrieve it before the
257 // window is deleted.
258         virtual int handle_event();
259
260         void create_history();
261         void update_history();
262         int refresh(int reset=0);
263
264 // The OK and Use This button submits a path.
265 // The cancel button has a current path highlighted but possibly different from the
266 // path actually submitted.
267 // Give the most recently submitted path
268         char* get_submitted_path();
269 // Give the path currently highlighted
270         char* get_current_path();
271
272 // Give the path of any selected item or 0.  Used when many items are
273 // selected in the list.  Should only be called when OK is pressed.
274         char* get_path(int selection);
275         int update_filter(const char *filter);
276         virtual int resize_event(int w, int h);
277         char* get_newfolder_title();
278         char* get_rename_title();
279         char* get_delete_title();
280         void delete_files();
281         BC_Button* get_ok_button();
282         BC_Button* get_cancel_button();
283         FileSystem *fs;
284
285 private:
286         int create_icons();
287         int extract_extension(char *out, const char *in);
288         int create_tables();
289         int delete_tables();
290 // Called by directory history menu to change directories but leave
291 // filename untouched.
292         int submit_dir(char *dir);
293         int submit_file(const char *path, int use_this = 0);
294 // Called by move_column_event
295         void move_column(int src, int dst);
296         int get_display_mode();
297         int get_listbox_w();
298         int get_listbox_h(int y);
299         void create_listbox(int x, int y, int mode);
300 // Get the icon number for a listbox
301         BC_Pixmap* get_icon(char *path, int is_dir);
302         static const char* columntype_to_text(int type);
303 // Get the column whose type matches type.
304         int column_of_type(int type);
305
306         BC_Pixmap *icons[TOTAL_ICONS];
307         BC_FileBoxRecent *recent_popup;
308         BC_FileBoxTextBox *textbox;
309         BC_FileBoxListBox *listbox;
310         BC_Title *filter_title;
311         BC_FileBoxFilterText *filter_text;
312         BC_FileBoxFilterMenu *filter_popup;
313         BC_TextBox *directory_title;
314         BC_Button *icon_button;
315         BC_Button *text_button;
316         BC_Button *folder_button;
317         BC_Button *rename_button;
318         BC_Button *updir_button;
319         BC_Button *delete_button;
320         BC_Button *reload_button;
321         BC_FileBoxSizeFormat *szfmt_button;
322         BC_Button *ok_button, *cancel_button;
323         BC_FileBoxUseThis *usethis_button;
324         char caption[BCTEXTLEN];
325         char current_path[BCTEXTLEN];
326         char submitted_path[BCTEXTLEN];
327         char directory[BCTEXTLEN];
328         char filename[BCTEXTLEN];
329         char string[BCTEXTLEN];
330         int want_directory;
331         int select_multiple;
332
333         int sort_column;
334         int sort_order;
335         int size_format;
336
337         const char *column_titles[FILEBOX_COLUMNS];
338         ArrayList<BC_ListBoxItem*> filter_list;
339         ArrayList<BC_ListBoxItem*> *list_column;
340         int *column_type;
341         int *column_width;
342 // Calculated based on directory or regular file searching
343         int columns;
344
345         char new_folder_title[BCTEXTLEN];
346         char rename_title[BCTEXTLEN];
347         BC_NewFolderThread *newfolder_thread;
348         BC_RenameThread *rename_thread;
349         BC_DeleteThread *delete_thread;
350         int h_padding;
351         ArrayList<BC_ListBoxItem*> recent_dirs;
352 };
353
354
355
356
357 #endif
358
359
360
361
362
363