win/make.bat: Add svnfix convenience target
[blender.git] / source / blender / editors / include / ED_fileselect.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2008 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup editors
22  */
23
24 #pragma once
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 struct ARegion;
31 struct FileAssetSelectParams;
32 struct FileDirEntry;
33 struct FileSelectParams;
34 struct Scene;
35 struct ScrArea;
36 struct SpaceFile;
37 struct bContext;
38 struct bScreen;
39 struct uiBlock;
40 struct wmOperator;
41 struct wmWindow;
42 struct wmWindowManager;
43
44 #define FILE_LAYOUT_HOR 1
45 #define FILE_LAYOUT_VER 2
46
47 typedef enum FileAttributeColumnType {
48   COLUMN_NONE = -1,
49   COLUMN_NAME = 0,
50   COLUMN_DATETIME,
51   COLUMN_SIZE,
52
53   ATTRIBUTE_COLUMN_MAX
54 } FileAttributeColumnType;
55
56 typedef struct FileAttributeColumn {
57   /** UI name for this column */
58   const char *name;
59
60   float width;
61   /* The sort type to use when sorting by this column. */
62   int sort_type; /* eFileSortType */
63
64   /* Alignment of column texts, header text is always left aligned */
65   int text_align; /* eFontStyle_Align */
66 } FileAttributeColumn;
67
68 typedef struct FileLayout {
69   /* view settings - XXX: move into own struct. */
70   int offset_top;
71   /* Height of the header for the different FileAttributeColumn's. */
72   int attribute_column_header_h;
73   int prv_w;
74   int prv_h;
75   int tile_w;
76   int tile_h;
77   int tile_border_x;
78   int tile_border_y;
79   int prv_border_x;
80   int prv_border_y;
81   int rows;
82   /* Those are the major layout columns the files are distributed across, not to be confused with
83    * 'attribute_columns' array below. */
84   int flow_columns;
85   int width;
86   int height;
87   int flag;
88   int dirty;
89   int textheight;
90   /* The columns for each item (name, modification date/time, size). Not to be confused with the
91    * 'flow_columns' above. */
92   FileAttributeColumn attribute_columns[ATTRIBUTE_COLUMN_MAX];
93
94   /* When we change display size, we may have to update static strings like size of files... */
95   short curr_size;
96 } FileLayout;
97
98 typedef struct FileSelection {
99   int first;
100   int last;
101 } FileSelection;
102
103 struct View2D;
104 struct rcti;
105
106 struct FileSelectParams *ED_fileselect_ensure_active_params(struct SpaceFile *sfile);
107 struct FileSelectParams *ED_fileselect_get_active_params(const struct SpaceFile *sfile);
108 struct FileSelectParams *ED_fileselect_get_file_params(const struct SpaceFile *sfile);
109 struct FileAssetSelectParams *ED_fileselect_get_asset_params(const struct SpaceFile *sfile);
110
111 void ED_fileselect_set_params_from_userdef(struct SpaceFile *sfile);
112 void ED_fileselect_params_to_userdef(struct SpaceFile *sfile,
113                                      const int temp_win_size[2],
114                                      const bool is_maximized);
115
116 void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *region);
117
118 FileLayout *ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *region);
119
120 int ED_fileselect_layout_numfiles(FileLayout *layout, struct ARegion *region);
121 int ED_fileselect_layout_offset(FileLayout *layout, int x, int y);
122 FileSelection ED_fileselect_layout_offset_rect(FileLayout *layout, const struct rcti *rect);
123
124 void ED_fileselect_layout_maskrect(const FileLayout *layout,
125                                    const struct View2D *v2d,
126                                    struct rcti *r_rect);
127 bool ED_fileselect_layout_is_inside_pt(const FileLayout *layout,
128                                        const struct View2D *v2d,
129                                        int x,
130                                        int y);
131 bool ED_fileselect_layout_isect_rect(const FileLayout *layout,
132                                      const struct View2D *v2d,
133                                      const struct rcti *rect,
134                                      struct rcti *r_dst);
135 void ED_fileselect_layout_tilepos(FileLayout *layout, int tile, int *x, int *y);
136
137 void ED_operatormacros_file(void);
138
139 void ED_fileselect_clear(struct wmWindowManager *wm, struct SpaceFile *sfile);
140
141 void ED_fileselect_exit(struct wmWindowManager *wm, struct SpaceFile *sfile);
142
143 bool ED_fileselect_is_file_browser(const struct SpaceFile *sfile);
144 bool ED_fileselect_is_asset_browser(const struct SpaceFile *sfile);
145 struct AssetLibrary *ED_fileselect_active_asset_library_get(const struct SpaceFile *sfile);
146 struct ID *ED_fileselect_active_asset_get(const struct SpaceFile *sfile);
147
148 /* Activate and select the file that corresponds to the given ID.
149  * Pass deferred=true to wait for the next refresh before activating. */
150 void ED_fileselect_activate_by_id(struct SpaceFile *sfile,
151                                   struct ID *asset_id,
152                                   const bool deferred);
153
154 void ED_fileselect_deselect_all(struct SpaceFile *sfile);
155 void ED_fileselect_activate_by_relpath(struct SpaceFile *sfile, const char *relative_path);
156
157 void ED_fileselect_window_params_get(const struct wmWindow *win,
158                                      int win_size[2],
159                                      bool *is_maximized);
160
161 struct ScrArea *ED_fileselect_handler_area_find(const struct wmWindow *win,
162                                                 const struct wmOperator *file_operator);
163
164 int ED_path_extension_type(const char *path);
165 int ED_file_extension_icon(const char *path);
166 int ED_file_icon(const struct FileDirEntry *file);
167
168 void ED_file_read_bookmarks(void);
169
170 void ED_file_change_dir_ex(struct bContext *C, struct ScrArea *area);
171 void ED_file_change_dir(struct bContext *C);
172
173 void ED_file_path_button(struct bScreen *screen,
174                          const struct SpaceFile *sfile,
175                          struct FileSelectParams *params,
176                          struct uiBlock *block);
177
178 /* File menu stuff */
179
180 /* FSMenuEntry's without paths indicate separators */
181 typedef struct FSMenuEntry {
182   struct FSMenuEntry *next;
183
184   char *path;
185   char name[256]; /* FILE_MAXFILE */
186   short save;
187   short valid;
188   int icon;
189 } FSMenuEntry;
190
191 typedef enum FSMenuCategory {
192   FS_CATEGORY_SYSTEM,
193   FS_CATEGORY_SYSTEM_BOOKMARKS,
194   FS_CATEGORY_BOOKMARKS,
195   FS_CATEGORY_RECENT,
196   /* For internal use, a list of known paths that are used to match paths to icons and names. */
197   FS_CATEGORY_OTHER,
198 } FSMenuCategory;
199
200 typedef enum FSMenuInsert {
201   FS_INSERT_SORTED = (1 << 0),
202   FS_INSERT_SAVE = (1 << 1),
203   /** moves the item to the front of the list when its not already there */
204   FS_INSERT_FIRST = (1 << 2),
205   /** just append to preserve delivered order */
206   FS_INSERT_LAST = (1 << 3),
207 } FSMenuInsert;
208
209 struct FSMenu;
210 struct FSMenuEntry;
211
212 struct FSMenu *ED_fsmenu_get(void);
213 struct FSMenuEntry *ED_fsmenu_get_category(struct FSMenu *fsmenu, FSMenuCategory category);
214 void ED_fsmenu_set_category(struct FSMenu *fsmenu,
215                             FSMenuCategory category,
216                             struct FSMenuEntry *fsm_head);
217
218 int ED_fsmenu_get_nentries(struct FSMenu *fsmenu, FSMenuCategory category);
219
220 struct FSMenuEntry *ED_fsmenu_get_entry(struct FSMenu *fsmenu, FSMenuCategory category, int idx);
221
222 char *ED_fsmenu_entry_get_path(struct FSMenuEntry *fsentry);
223 void ED_fsmenu_entry_set_path(struct FSMenuEntry *fsentry, const char *path);
224
225 char *ED_fsmenu_entry_get_name(struct FSMenuEntry *fsentry);
226 void ED_fsmenu_entry_set_name(struct FSMenuEntry *fsentry, const char *name);
227
228 int ED_fsmenu_entry_get_icon(struct FSMenuEntry *fsentry);
229 void ED_fsmenu_entry_set_icon(struct FSMenuEntry *fsentry, const int icon);
230
231 #ifdef __cplusplus
232 }
233 #endif