Blender  V3.3
Classes | Macros | Typedefs | Functions | Variables
fsmenu.c File Reference
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_ghash.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "BKE_appdir.h"
#include "ED_fileselect.h"
#include "UI_interface_icons.h"
#include "UI_resources.h"
#include "WM_api.h"
#include "WM_types.h"
#include "fsmenu.h"

Go to the source code of this file.

Classes

struct  FSMenu
 

Macros

#define FS_UDIR_PATH(dir, icon)
 

Typedefs

typedef struct FSMenu FSMenu
 

Functions

FSMenuED_fsmenu_get (void)
 
struct FSMenuEntryED_fsmenu_get_category (struct FSMenu *fsmenu, FSMenuCategory category)
 
void ED_fsmenu_set_category (struct FSMenu *fsmenu, FSMenuCategory category, FSMenuEntry *fsm_head)
 
int ED_fsmenu_get_nentries (struct FSMenu *fsmenu, FSMenuCategory category)
 
FSMenuEntryED_fsmenu_get_entry (struct FSMenu *fsmenu, FSMenuCategory category, int idx)
 
char * ED_fsmenu_entry_get_path (struct FSMenuEntry *fsentry)
 
void ED_fsmenu_entry_set_path (struct FSMenuEntry *fsentry, const char *path)
 
int ED_fsmenu_entry_get_icon (struct FSMenuEntry *fsentry)
 
void ED_fsmenu_entry_set_icon (struct FSMenuEntry *fsentry, const int icon)
 
static void fsmenu_entry_generate_name (struct FSMenuEntry *fsentry, char *name, size_t name_size)
 
char * ED_fsmenu_entry_get_name (struct FSMenuEntry *fsentry)
 
void ED_fsmenu_entry_set_name (struct FSMenuEntry *fsentry, const char *name)
 
void fsmenu_entry_refresh_valid (struct FSMenuEntry *fsentry)
 
short fsmenu_can_save (struct FSMenu *fsmenu, FSMenuCategory category, int idx)
 
void fsmenu_insert_entry (struct FSMenu *fsmenu, FSMenuCategory category, const char *path, const char *name, int icon, FSMenuInsert flag)
 
void fsmenu_remove_entry (struct FSMenu *fsmenu, FSMenuCategory category, int idx)
 
void fsmenu_write_file (struct FSMenu *fsmenu, const char *filepath)
 
void fsmenu_read_bookmarks (struct FSMenu *fsmenu, const char *filepath)
 
void fsmenu_read_system (struct FSMenu *fsmenu, int read_bookmarks)
 
static void fsmenu_free_category (struct FSMenu *fsmenu, FSMenuCategory category)
 
void fsmenu_refresh_system_category (struct FSMenu *fsmenu)
 
static void fsmenu_free_ex (FSMenu **fsmenu)
 
void fsmenu_free (void)
 
static void fsmenu_copy_category (struct FSMenu *fsmenu_dst, struct FSMenu *fsmenu_src, const FSMenuCategory category)
 
static FSMenufsmenu_copy (FSMenu *fsmenu)
 
int fsmenu_get_active_indices (struct FSMenu *fsmenu, enum FSMenuCategory category, const char *dir)
 
static void fsmenu_bookmark_validate_job_startjob (void *fsmenuv, short *stop, short *do_update, float *UNUSED(progress))
 
static void fsmenu_bookmark_validate_job_update (void *fsmenuv)
 
static void fsmenu_bookmark_validate_job_end (void *fsmenuv)
 
static void fsmenu_bookmark_validate_job_free (void *fsmenuv)
 
static void fsmenu_bookmark_validate_job_start (wmWindowManager *wm)
 
static void fsmenu_bookmark_validate_job_stop (wmWindowManager *wm)
 
void fsmenu_refresh_bookmarks_status (wmWindowManager *wm, FSMenu *fsmenu)
 
XDG User Directory Support (Unix)

Generic Unix, Use XDG when available, otherwise fallback to the home directory.

static GHashfsmenu_xdg_user_dirs_parse (const char *home)
 
static void fsmenu_xdg_user_dirs_free (GHash *xdg_map)
 
static void fsmenu_xdg_insert_entry (GHash *xdg_map, struct FSMenu *fsmenu, const char *key, const char *default_path, int icon, const char *home)
 

Variables

static FSMenug_fsmenu = NULL
 

Macro Definition Documentation

◆ FS_UDIR_PATH

#define FS_UDIR_PATH (   dir,
  icon 
)
Value:
if (BLI_strnlen(dir, 3) > 2) { \
fsmenu_insert_entry(fsmenu, FS_CATEGORY_OTHER, dir, NULL, icon, FS_INSERT_LAST); \
}
size_t BLI_strnlen(const char *str, size_t maxlen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition: string.c:899
@ FS_CATEGORY_OTHER
@ FS_INSERT_LAST

Typedef Documentation

◆ FSMenu

typedef struct FSMenu FSMenu

Function Documentation

◆ ED_fsmenu_entry_get_icon()

int ED_fsmenu_entry_get_icon ( struct FSMenuEntry fsentry)

Definition at line 265 of file fsmenu.c.

References FSMenuEntry::icon.

◆ ED_fsmenu_entry_get_name()

char* ED_fsmenu_entry_get_name ( struct FSMenuEntry fsentry)

Definition at line 292 of file fsmenu.c.

References fsmenu_entry_generate_name(), and FSMenuEntry::name.

◆ ED_fsmenu_entry_get_path()

char* ED_fsmenu_entry_get_path ( struct FSMenuEntry fsentry)

Definition at line 243 of file fsmenu.c.

References FSMenuEntry::path.

◆ ED_fsmenu_entry_set_icon()

void ED_fsmenu_entry_set_icon ( struct FSMenuEntry fsentry,
const int  icon 
)

Definition at line 270 of file fsmenu.c.

References FSMenuEntry::icon.

Referenced by fsmenu_insert_entry().

◆ ED_fsmenu_entry_set_name()

void ED_fsmenu_entry_set_name ( struct FSMenuEntry fsentry,
const char *  name 
)

◆ ED_fsmenu_entry_set_path()

void ED_fsmenu_entry_set_path ( struct FSMenuEntry fsentry,
const char *  path 
)

◆ ED_fsmenu_get()

FSMenu* ED_fsmenu_get ( void  )

◆ ED_fsmenu_get_category()

struct FSMenuEntry* ED_fsmenu_get_category ( struct FSMenu fsmenu,
FSMenuCategory  category 
)

◆ ED_fsmenu_get_entry()

FSMenuEntry* ED_fsmenu_get_entry ( struct FSMenu fsmenu,
FSMenuCategory  category,
int  idx 
)

Definition at line 231 of file fsmenu.c.

References ED_fsmenu_get_category(), and FSMenuEntry::next.

Referenced by reset_recent_exec().

◆ ED_fsmenu_get_nentries()

int ED_fsmenu_get_nentries ( struct FSMenu fsmenu,
FSMenuCategory  category 
)

Definition at line 219 of file fsmenu.c.

References count, ED_fsmenu_get_category(), and FSMenuEntry::next.

Referenced by bookmark_delete_exec(), and bookmark_move_exec().

◆ ED_fsmenu_set_category()

void ED_fsmenu_set_category ( struct FSMenu fsmenu,
FSMenuCategory  category,
FSMenuEntry fsm_head 
)

◆ fsmenu_bookmark_validate_job_end()

static void fsmenu_bookmark_validate_job_end ( void fsmenuv)
static

Definition at line 1192 of file fsmenu.c.

References fsmenu_bookmark_validate_job_update().

Referenced by fsmenu_bookmark_validate_job_start().

◆ fsmenu_bookmark_validate_job_free()

static void fsmenu_bookmark_validate_job_free ( void fsmenuv)
static

Definition at line 1198 of file fsmenu.c.

References fsmenu_free_ex().

Referenced by fsmenu_bookmark_validate_job_start().

◆ fsmenu_bookmark_validate_job_start()

static void fsmenu_bookmark_validate_job_start ( wmWindowManager wm)
static

◆ fsmenu_bookmark_validate_job_startjob()

static void fsmenu_bookmark_validate_job_startjob ( void fsmenuv,
short *  stop,
short *  do_update,
float UNUSEDprogress 
)
static

◆ fsmenu_bookmark_validate_job_stop()

static void fsmenu_bookmark_validate_job_stop ( wmWindowManager wm)
static

◆ fsmenu_bookmark_validate_job_update()

static void fsmenu_bookmark_validate_job_update ( void fsmenuv)
static

◆ fsmenu_can_save()

short fsmenu_can_save ( struct FSMenu fsmenu,
enum FSMenuCategory  category,
int  idx 
)

Return whether the entry was created by the user and can be saved and deleted

Definition at line 354 of file fsmenu.c.

References ED_fsmenu_get_category(), FSMenuEntry::next, and FSMenuEntry::save.

◆ fsmenu_copy()

static FSMenu* fsmenu_copy ( FSMenu fsmenu)
static

◆ fsmenu_copy_category()

static void fsmenu_copy_category ( struct FSMenu fsmenu_dst,
struct FSMenu fsmenu_src,
const FSMenuCategory  category 
)
static

◆ fsmenu_entry_generate_name()

static void fsmenu_entry_generate_name ( struct FSMenuEntry fsentry,
char *  name,
size_t  name_size 
)
static

◆ fsmenu_entry_refresh_valid()

void fsmenu_entry_refresh_valid ( struct FSMenuEntry fsentry)

Refresh 'valid' status of given menu entry

Definition at line 329 of file fsmenu.c.

References BLI_is_dir(), NULL, FSMenuEntry::path, STRCASEEQLEN, and FSMenuEntry::valid.

Referenced by fsmenu_bookmark_validate_job_startjob(), and fsmenu_insert_entry().

◆ fsmenu_free()

void fsmenu_free ( void  )

Free's all the memory associated with the fsmenu

Definition at line 1082 of file fsmenu.c.

References fsmenu_free_ex(), and g_fsmenu.

Referenced by ED_file_exit(), and ED_file_read_bookmarks().

◆ fsmenu_free_category()

static void fsmenu_free_category ( struct FSMenu fsmenu,
FSMenuCategory  category 
)
static

◆ fsmenu_free_ex()

static void fsmenu_free_ex ( FSMenu **  fsmenu)
static

◆ fsmenu_get_active_indices()

int fsmenu_get_active_indices ( struct FSMenu fsmenu,
enum FSMenuCategory  category,
const char *  dir 
)

Get active index based on given directory.

Definition at line 1125 of file fsmenu.c.

References BLI_path_cmp, ED_fsmenu_get_category(), FSMenuEntry::next, and FSMenuEntry::path.

Referenced by file_refresh().

◆ fsmenu_insert_entry()

void fsmenu_insert_entry ( struct FSMenu fsmenu,
enum FSMenuCategory  category,
const char *  path,
const char *  name,
int  icon,
enum FSMenuInsert  flag 
)

◆ fsmenu_read_bookmarks()

void fsmenu_read_bookmarks ( struct FSMenu fsmenu,
const char *  filepath 
)

reads the 'bookmarks' from the specified file

Definition at line 559 of file fsmenu.c.

References BLI_exists(), BLI_fopen(), BLI_strncpy(), FILE_MAXDIR, FILE_MAXFILE, FS_CATEGORY_BOOKMARKS, FS_CATEGORY_RECENT, FS_INSERT_SAVE, fsmenu_insert_entry(), len, FSMenuEntry::name, NULL, and STRPREFIX.

Referenced by ED_file_read_bookmarks().

◆ fsmenu_read_system()

void fsmenu_read_system ( struct FSMenu fsmenu,
int  read_bookmarks 
)

◆ fsmenu_refresh_bookmarks_status()

void fsmenu_refresh_bookmarks_status ( struct wmWindowManager wm,
struct FSMenu fsmenu 
)

Refresh 'valid' status of all menu entries

Definition at line 1229 of file fsmenu.c.

References BLI_assert, ED_fsmenu_get(), fsmenu_bookmark_validate_job_start(), fsmenu_bookmark_validate_job_stop(), and UNUSED_VARS_NDEBUG.

Referenced by bookmark_cleanup_exec(), and file_refresh_exec().

◆ fsmenu_refresh_system_category()

void fsmenu_refresh_system_category ( struct FSMenu fsmenu)

Refresh system directory menu

Definition at line 1056 of file fsmenu.c.

References ED_fsmenu_set_category(), FS_CATEGORY_SYSTEM, FS_CATEGORY_SYSTEM_BOOKMARKS, fsmenu_free_category(), fsmenu_read_system(), and NULL.

Referenced by file_refresh_exec().

◆ fsmenu_remove_entry()

void fsmenu_remove_entry ( struct FSMenu fsmenu,
enum FSMenuCategory  category,
int  idx 
)

Removes the fsmenu entry at the given index.

Definition at line 489 of file fsmenu.c.

References ED_fsmenu_get_category(), ED_fsmenu_set_category(), MEM_freeN, FSMenuEntry::next, NULL, FSMenuEntry::path, and FSMenuEntry::save.

Referenced by bookmark_cleanup_exec(), bookmark_delete_exec(), and reset_recent_exec().

◆ fsmenu_write_file()

void fsmenu_write_file ( struct FSMenu fsmenu,
const char *  filepath 
)

◆ fsmenu_xdg_insert_entry()

static void fsmenu_xdg_insert_entry ( GHash xdg_map,
struct FSMenu fsmenu,
const char *  key,
const char *  default_path,
int  icon,
const char *  home 
)
static

Add fsmenu entry for system folders on linux.

  • Check if a path is stored in the GHash generated from user-dirs.dirs.
  • If not, check for a default path in $HOME.
Parameters
keyUse user-dirs.dirs format "XDG_EXAMPLE_DIR"
default_pathDirectory name to check in $HOME, also used for the menu entry name.

Definition at line 179 of file fsmenu.c.

References BLI_ghash_lookup(), BLI_path_join(), FILE_MAXDIR, FS_CATEGORY_SYSTEM_BOOKMARKS, FS_INSERT_LAST, fsmenu_insert_entry(), FSMenuEntry::icon, N_, and NULL.

Referenced by fsmenu_read_system().

◆ fsmenu_xdg_user_dirs_free()

static void fsmenu_xdg_user_dirs_free ( GHash xdg_map)
static

Definition at line 164 of file fsmenu.c.

References BLI_ghash_free(), MEM_freeN, and NULL.

Referenced by fsmenu_read_system().

◆ fsmenu_xdg_user_dirs_parse()

static GHash* fsmenu_xdg_user_dirs_parse ( const char *  home)
static

Look for user-dirs.dirs, where localized or custom user folders are defined, and store their paths in a GHash.

Definition at line 105 of file fsmenu.c.

References BLI_fopen(), BLI_ghash_insert(), BLI_ghash_str_new_ex(), BLI_path_join(), BLI_str_rstrip(), BLI_strdup(), FILE_MAX, FILE_MAXDIR, l, NULL, SEP_STR, and STRPREFIX.

Referenced by fsmenu_read_system().

Variable Documentation

◆ g_fsmenu

FSMenu* g_fsmenu = NULL
static

Definition at line 61 of file fsmenu.c.

Referenced by ED_fsmenu_get(), fsmenu_bookmark_validate_job_start(), and fsmenu_free().