Blender V4.3
fsmenu.cc File Reference
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_string_utils.hh"
#include "BLI_utildefines.h"
#include "BLT_translation.hh"
#include "BKE_appdir.hh"
#include "ED_fileselect.hh"
#include "UI_resources.hh"
#include "WM_api.hh"
#include "WM_types.hh"
#include "fsmenu.h"

Go to the source code of this file.

Classes

struct  FSMenu
 

Functions

FSMenuED_fsmenu_get ()
 
FSMenuEntryED_fsmenu_get_category (FSMenu *fsmenu, FSMenuCategory category)
 
void ED_fsmenu_set_category (FSMenu *fsmenu, FSMenuCategory category, FSMenuEntry *fsm_head)
 
int ED_fsmenu_get_nentries (FSMenu *fsmenu, FSMenuCategory category)
 
FSMenuEntryED_fsmenu_get_entry (FSMenu *fsmenu, FSMenuCategory category, int idx)
 
char * ED_fsmenu_entry_get_path (FSMenuEntry *fsentry)
 
void ED_fsmenu_entry_set_path (FSMenuEntry *fsentry, const char *path)
 
int ED_fsmenu_entry_get_icon (FSMenuEntry *fsentry)
 
void ED_fsmenu_entry_set_icon (FSMenuEntry *fsentry, const int icon)
 
static void fsmenu_entry_generate_name (FSMenuEntry *fsentry, char *name, size_t name_size)
 
char * ED_fsmenu_entry_get_name (FSMenuEntry *fsentry)
 
void ED_fsmenu_entry_set_name (FSMenuEntry *fsentry, const char *name)
 
void fsmenu_entry_refresh_valid (FSMenuEntry *fsentry)
 
short fsmenu_can_save (FSMenu *fsmenu, FSMenuCategory category, int idx)
 
void fsmenu_insert_entry (FSMenu *fsmenu, FSMenuCategory category, const char *path, const char *name, int icon, FSMenuInsert flag)
 
void fsmenu_remove_entry (FSMenu *fsmenu, FSMenuCategory category, int idx)
 
bool fsmenu_write_file (FSMenu *fsmenu, const char *filepath)
 
void fsmenu_read_bookmarks (FSMenu *fsmenu, const char *filepath)
 
static void fsmenu_free_category (FSMenu *fsmenu, FSMenuCategory category)
 
void fsmenu_refresh_system_category (FSMenu *fsmenu)
 
static void fsmenu_free_ex (FSMenu **fsmenu)
 
void fsmenu_free ()
 
static void fsmenu_copy_category (FSMenu *fsmenu_dst, FSMenu *fsmenu_src, const FSMenuCategory category)
 
static FSMenufsmenu_copy (FSMenu *fsmenu)
 
int fsmenu_get_active_indices (FSMenu *fsmenu, enum FSMenuCategory category, const char *dir)
 
static void fsmenu_bookmark_validate_job_startjob (void *fsmenuv, wmJobWorkerStatus *worker_status)
 
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)
 

Variables

static FSMenug_fsmenu = nullptr
 

Function Documentation

◆ ED_fsmenu_entry_get_icon()

int ED_fsmenu_entry_get_icon ( FSMenuEntry * fsentry)

Definition at line 147 of file fsmenu.cc.

References FSMenuEntry::icon.

◆ ED_fsmenu_entry_get_name()

char * ED_fsmenu_entry_get_name ( FSMenuEntry * fsentry)

Definition at line 174 of file fsmenu.cc.

References fsmenu_entry_generate_name(), and FSMenuEntry::name.

◆ ED_fsmenu_entry_get_path()

char * ED_fsmenu_entry_get_path ( FSMenuEntry * fsentry)

Definition at line 123 of file fsmenu.cc.

References FSMenuEntry::path.

◆ ED_fsmenu_entry_set_icon()

void ED_fsmenu_entry_set_icon ( FSMenuEntry * fsentry,
const int icon )

Definition at line 152 of file fsmenu.cc.

References FSMenuEntry::icon.

Referenced by fsmenu_insert_entry().

◆ ED_fsmenu_entry_set_name()

◆ ED_fsmenu_entry_set_path()

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

◆ ED_fsmenu_get()

◆ ED_fsmenu_get_category()

◆ ED_fsmenu_get_entry()

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

Definition at line 110 of file fsmenu.cc.

References ED_fsmenu_get_category(), and FSMenuEntry::next.

Referenced by reset_recent_exec().

◆ ED_fsmenu_get_nentries()

int ED_fsmenu_get_nentries ( FSMenu * fsmenu,
FSMenuCategory category )

Definition at line 98 of file fsmenu.cc.

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

Referenced by bookmark_delete_exec(), and bookmark_move_exec().

◆ ED_fsmenu_set_category()

◆ fsmenu_bookmark_validate_job_end()

static void fsmenu_bookmark_validate_job_end ( void * fsmenuv)
static

Definition at line 643 of file fsmenu.cc.

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 649 of file fsmenu.cc.

References fsmenu_free_ex().

Referenced by fsmenu_bookmark_validate_job_start().

◆ fsmenu_bookmark_validate_job_start()

◆ fsmenu_bookmark_validate_job_startjob()

static void fsmenu_bookmark_validate_job_startjob ( void * fsmenuv,
wmJobWorkerStatus * worker_status )
static

Thanks to some bookmarks sometimes being network drives that can have tens of seconds of delay before being defined as unreachable by the OS, we need to validate the bookmarks in an asynchronous job.

Definition at line 599 of file fsmenu.cc.

References ARRAY_SIZE, wmJobWorkerStatus::do_update, ED_fsmenu_get_category(), FS_CATEGORY_BOOKMARKS, FS_CATEGORY_RECENT, FS_CATEGORY_SYSTEM, FS_CATEGORY_SYSTEM_BOOKMARKS, fsmenu_entry_refresh_valid(), FSMenuEntry::next, and wmJobWorkerStatus::stop.

Referenced by fsmenu_bookmark_validate_job_start().

◆ fsmenu_bookmark_validate_job_stop()

static void fsmenu_bookmark_validate_job_stop ( wmWindowManager * wm)
static

◆ fsmenu_bookmark_validate_job_update()

◆ 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 238 of file fsmenu.cc.

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

◆ fsmenu_copy()

◆ fsmenu_copy_category()

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

◆ fsmenu_entry_generate_name()

static void fsmenu_entry_generate_name ( 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 213 of file fsmenu.cc.

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

Referenced by fsmenu_bookmark_validate_job_startjob(), and fsmenu_insert_entry().

◆ fsmenu_free()

void fsmenu_free ( void )

Frees all the memory associated with the fsmenu.

Definition at line 537 of file fsmenu.cc.

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 ( FSMenu * fsmenu,
FSMenuCategory category )
static

◆ fsmenu_free_ex()

◆ 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 580 of file fsmenu.cc.

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

Referenced by file_refresh().

◆ fsmenu_insert_entry()

◆ fsmenu_read_bookmarks()

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

reads the 'bookmarks' from the specified file

Definition at line 442 of file fsmenu.cc.

References BLI_exists(), BLI_fopen(), FILE_MAXDIR, FILE_MAXFILE, FS_CATEGORY_BOOKMARKS, FS_CATEGORY_RECENT, FS_INSERT_SAVE, fsmenu_insert_entry(), len, STRNCPY, and STRPREFIX.

Referenced by ED_file_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 684 of file fsmenu.cc.

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 511 of file fsmenu.cc.

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

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 367 of file fsmenu.cc.

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

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

◆ fsmenu_write_file()

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

Variable Documentation

◆ g_fsmenu

FSMenu* g_fsmenu = nullptr
static

Definition at line 43 of file fsmenu.cc.

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