26 #define awt_assert(cond) arb_assert(cond)
38 mutable bool triggerOnDataChange;
45 void call(
bool treeDataChanged) { cb(awar, treeDataChanged); }
47 void rename_if(
const char *oldname,
const char *newname)
const {
54 ptrdiff_t
diff = (
const char*)awar - (
const char*)other.awar;
64 return bc1->is_less_than(*bc2);
83 void tree_renamed(
const char *oldname,
const char *newname);
89 TreeAwarRegistry::SINGLETON.
setNull();
107 if (triggerOnDataChange) {
130 triggerOnDataChange(triggerIfTreeDataChanges)
153 if (name_change[0]) {
154 char *equal = strchr(name_change,
'=');
156 if (!equal) error =
"Expected '=' missing";
160 const char *oldname = name_change;
161 const char *newname = equal+1;
162 TreeAwarRegistry::SINGLETON->
tree_renamed(oldname, newname);
166 fprintf(stderr,
"Warning: Cannot handle invalid tree-name-change ('%s'; %s)",
181 for (BoundTreeAwarCallbacks::iterator bcb = callbacks.begin(); bcb != callbacks.end(); ++bcb) {
182 (*bcb)->rename_if(oldname, newname);
198 if (TreeAwarRegistry::SINGLETON.isSet()) {
199 if (TreeAwarRegistry::SINGLETON->
get_gb_main() != gbmain) {
200 GBK_terminate(
"double init of TreeAwarRegistry with different gbmain");
static void TreeDataChanged_cb(UNFIXED, BoundTreeAwarCallback *tac, GB_CB_TYPE cbtype)
bool operator<(const BoundTreeAwarCallbackPtr &bc1, const BoundTreeAwarCallbackPtr &bc2)
BoundTreeAwarCallback(AW_awar *awar_, const TreeAwarCallback &cb_, bool triggerIfTreeDataChanges)
void GB_atclose_callback(GBDATA *gbd, const DatabaseCallback &atClose)
void add(BoundTreeAwarCallbackPtr bcb)
GB_ERROR GB_add_callback(GBDATA *gbd, GB_CB_TYPE type, const DatabaseCallback &dbcb)
void AWT_registerTreeAwarSimple(AW_awar *awar)
void AWT_announce_tree_renamed(const char *oldname, const char *newname)
const char * GBS_global_string(const char *templat,...)
void AWT_registerTreeAwarCallback(AW_awar *awar, const TreeAwarCallback &tacb, bool triggerIfTreeDataChanges)
void setNull()
set SmartPtr to NULp
void bind_tree_callback()
AW_awar * add_callback(const RootCallback &cb)
struct Unfixed_cb_parameter * UNFIXED
const char * read_char_pntr() const
static AW_root * SINGLETON
static int diff(int v1, int v2, int v3, int v4, int st, int en)
#define AWAR_ARB_TREE_RENAMED
static void announce_renamed(const char *oldname, const char *newname)
void GBK_terminate(const char *error) __ATTR__NORETURN
void AWT_announce_tree_deleted(const char *name)
static void destroy_TreeAwarRegistry()
bool is_less_than(const BoundTreeAwarCallback &other) const
static void error(const char *msg)
std::set< BoundTreeAwarCallbackPtr > BoundTreeAwarCallbacks
char * read_string() const
AW_awar * awar(const char *awar)
AW_awar * remove_callback(const RootCallback &cb)
static void TreeAwarChanged_cb(UNFIXED, BoundTreeAwarCallback *tac)
TreeAwarRegistry(GBDATA *gb_main_)
SmartPtr< BoundTreeAwarCallback > BoundTreeAwarCallbackPtr
void rename_if(const char *oldname, const char *newname) const
void GB_remove_callback(GBDATA *gbd, GB_CB_TYPE type, const DatabaseCallback &dbcb)
static void tree_renamed_cb(AW_root *aw_root)
GB_ERROR write_string(const char *aw_string)
GBDATA * GBT_find_tree(GBDATA *gb_main, const char *tree_name)
GB_transaction ta(gb_var)
GBDATA * get_gb_main(DbSel db)
void AWT_initTreeAwarRegistry(GBDATA *gbmain)
static SmartPtr< TreeAwarRegistry > SINGLETON
void call(bool treeDataChanged)
void tree_renamed(const char *oldname, const char *newname)