Cleanup: use BLI_libblock prefix for id functions

- test_idbutton -> BLI_libblock_ensure_unique_name (not only used from UI)
- BKE_rename_id -> BKE_libblock_rename (always pass valid main)

also rename:
- name_uiprefix_id -> BKE_id_uiprefix
This commit is contained in:
Campbell Barton 2015-12-28 17:17:25 +11:00
parent 12874c703c
commit 641d4e2b7f
8 changed files with 33 additions and 37 deletions

@ -57,6 +57,16 @@ void *BKE_libblock_copy_nolib(struct ID *id, const bool do_action) ATTR_NONNULL(
void *BKE_libblock_copy(struct ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
void BKE_libblock_copy_data(struct ID *id, const struct ID *id_from, const bool do_action);
void BKE_libblock_relink(struct ID *id);
void BKE_libblock_rename(struct Main *bmain, struct ID *id, const char *name) ATTR_NONNULL();
void BLI_libblock_ensure_unique_name(struct Main *bmain, const char *name) ATTR_NONNULL();
void BKE_libblock_free(struct Main *bmain, void *idv) ATTR_NONNULL();
void BKE_libblock_free_ex(struct Main *bmain, void *idv, bool do_id_user) ATTR_NONNULL();
void BKE_libblock_free_us(struct Main *bmain, void *idv) ATTR_NONNULL();
void BKE_libblock_free_data(struct Main *bmain, struct ID *id) ATTR_NONNULL();
struct ID *BKE_libblock_find_name_ex(struct Main *bmain, const short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
struct ID *BKE_libblock_find_name(const short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
void BKE_id_lib_local_paths(struct Main *bmain, struct Library *lib, struct ID *id);
void id_lib_extern(struct ID *id);
@ -81,12 +91,6 @@ struct ListBase *which_libbase(struct Main *mainlib, short type);
#define MAX_LIBARRAY 34
int set_listbasepointers(struct Main *main, struct ListBase *lb[MAX_LIBARRAY]);
void BKE_libblock_free(struct Main *bmain, void *idv);
void BKE_libblock_free_ex(struct Main *bmain, void *idv, bool do_id_user);
void BKE_libblock_free_us(struct Main *bmain, void *idv);
void BKE_libblock_free_data(struct Main *bmain, struct ID *id);
/* Main API */
struct Main *BKE_main_new(void);
void BKE_main_free(struct Main *mainvar);
@ -109,15 +113,11 @@ void BKE_main_id_clear_newpoins(struct Main *bmain);
void BKE_main_lib_objects_recalc_all(struct Main *bmain);
void BKE_rename_id(struct Main *bmain, struct ID *id, const char *name);
void name_uiprefix_id(char *name, const struct ID *id);
void test_idbutton(char *name);
/* (MAX_ID_NAME - 2) + 3 */
void BKE_id_ui_prefix(char name[66 + 1], const struct ID *id);
void BKE_library_make_local(struct Main *bmain, struct Library *lib, bool untagged_only);
struct ID *BKE_libblock_find_name_ex(struct Main *bmain, const short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
struct ID *BKE_libblock_find_name(const short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
typedef void (*BKE_library_free_window_manager_cb)(struct bContext *, struct wmWindowManager *);
typedef void (*BKE_library_free_notifier_reference_cb)(const void *);
typedef void (*BKE_library_free_editor_id_reference_cb)(const struct ID *);

@ -1809,21 +1809,23 @@ void BKE_library_make_local(Main *bmain, Library *lib, bool untagged_only)
}
}
void test_idbutton(char *name)
/**
* Use after setting the ID's name
* When name exists: call 'new_id'
*/
void BLI_libblock_ensure_unique_name(Main *bmain, const char *name)
{
/* called from buttons: when name already exists: call new_id */
ListBase *lb;
ID *idtest;
lb = which_libbase(G.main, GS(name));
lb = which_libbase(bmain, GS(name));
if (lb == NULL) return;
/* search for id */
idtest = BLI_findstring(lb, name + 2, offsetof(ID, name) + 2);
if (idtest && !new_id(lb, idtest, name + 2)) {
if (idtest && !new_id(lb, idtest, idtest->name + 2)) {
id_sort_by_name(lb, idtest);
}
}
@ -1831,15 +1833,9 @@ void test_idbutton(char *name)
/**
* Sets the name of a block to name, suitably adjusted for uniqueness.
*/
void BKE_rename_id(Main *bmain, ID *id, const char *name)
void BKE_libblock_rename(Main *bmain, ID *id, const char *name)
{
ListBase *lb;
if (!bmain)
bmain = G.main;
lb = which_libbase(bmain, GS(id->name));
ListBase *lb = which_libbase(bmain, GS(id->name));
new_id(lb, id, name);
}
@ -1847,7 +1843,7 @@ void BKE_rename_id(Main *bmain, ID *id, const char *name)
* Returns in name the name of the block, with a 3-character prefix prepended
* indicating whether it comes from a library, has a fake user, or no users.
*/
void name_uiprefix_id(char *name, const ID *id)
void BKE_id_ui_prefix(char name[MAX_ID_NAME + 1], const ID *id)
{
name[0] = id->lib ? (ID_MISSING(id) ? 'M' : 'L') : ' ';
name[1] = (id->flag & LIB_FAKEUSER) ? 'F' : ((id->us == 0) ? '0' : ' ');

@ -232,9 +232,8 @@ void BLO_update_defaults_startup_blend(Main *bmain)
/* rename twist brush to rotate brush to match rotate tool */
br = (Brush *)BKE_libblock_find_name_ex(bmain, ID_BR, "Twist");
if (br)
{
BKE_rename_id(bmain, &br->id, "Rotate");
if (br) {
BKE_libblock_rename(bmain, &br->id, "Rotate");
}
}
}

@ -654,7 +654,7 @@ std::vector<Object *> *DocumentImporter::write_node(COLLADAFW::Node *node, COLLA
for (std::vector<Object *>::iterator it = objects_done->begin(); it != objects_done->end(); ++it) {
ob = *it;
std::string nodename = node->getName().size() ? node->getName() : node->getOriginalId();
BKE_rename_id(NULL, &ob->id, (char *)nodename.c_str());
BKE_libblock_rename(G.main, &ob->id, (char *)nodename.c_str());
object_map.insert(std::pair<COLLADAFW::UniqueId, Object *>(node->getUniqueId(), ob));
node_map[node->getUniqueId()] = node;

@ -1524,7 +1524,7 @@ static void rna_search_cb(const struct bContext *C, void *arg_but, const char *s
#if 0 /* this name is used for a string comparison and can't be modified, TODO */
/* if ever enabled, make name_ui be MAX_ID_NAME+1 */
name_uiprefix_id(name_ui, id);
BKE_id_ui_prefix(name_ui, id);
#else
BLI_strncpy(name_ui, id->name + 2, sizeof(name_ui));
#endif

@ -148,11 +148,11 @@ static void id_search_cb(const bContext *C, void *arg_template, const char *str,
continue;
if (*str == '\0' || BLI_strcasestr(id->name + 2, str)) {
/* +1 is needed because name_uiprefix_id used 3 letter prefix
/* +1 is needed because BKE_id_ui_prefix used 3 letter prefix
* followed by ID_NAME-2 characters from id->name
*/
char name_ui[MAX_ID_NAME + 1];
name_uiprefix_id(name_ui, id);
BKE_id_ui_prefix(name_ui, id);
iconid = ui_id_icon_get(C, id, template->preview);

@ -474,7 +474,7 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
TreeElement *te = outliner_find_tree_element(&soops->tree, tselem);
if (tselem->type == 0) {
test_idbutton(tselem->id->name); // library.c, unique name and alpha sort
BLI_libblock_ensure_unique_name(G.main, tselem->id->name);
switch (GS(tselem->id->name)) {
case ID_MA:
@ -509,7 +509,7 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
defgroup_unique_name(te->directdata, (Object *)tselem->id); // id = object
break;
case TSE_NLA_ACTION:
test_idbutton(tselem->id->name);
BLI_libblock_ensure_unique_name(G.main, tselem->id->name);
break;
case TSE_EBONE:
{

@ -93,6 +93,7 @@ EnumPropertyItem rna_enum_id_type_items[] = {
#include "BKE_animsys.h"
#include "BKE_material.h"
#include "BKE_depsgraph.h"
#include "BKE_global.h" /* XXX, remove me */
#include "WM_api.h"
@ -113,7 +114,7 @@ void rna_ID_name_set(PointerRNA *ptr, const char *value)
{
ID *id = (ID *)ptr->data;
BLI_strncpy_utf8(id->name + 2, value, sizeof(id->name) - 2);
test_idbutton(id->name);
BLI_libblock_ensure_unique_name(G.main, id->name);
}
static int rna_ID_name_editable(PointerRNA *ptr)