ARB
NT_edconf.cxx
Go to the documentation of this file.
1 // =============================================================== //
2 // //
3 // File : NT_edconf.cxx //
4 // Purpose : //
5 // //
6 // Institute of Microbiology (Technical University Munich) //
7 // http://www.arb-home.de/ //
8 // //
9 // =============================================================== //
10 
11 #include "NT_local.h"
12 
13 #include <TreeDisplay.hxx>
14 
15 #include <sel_boxes.hxx>
16 #include <selection_admin.h>
17 #include <config_manager.hxx>
18 
19 #include <aw_awars.hxx>
20 #include <aw_root.hxx>
21 #include <aw_msg.hxx>
22 #include <aw_select.hxx>
23 #include <aw_system.hxx>
24 
25 #include <ad_config.h>
26 #include <ad_cb_prot.h>
27 
28 #include <map>
29 
30 using namespace std;
31 
32 // AWT_canvas-local (%i=canvas-id):
33 #define AWAR_CL_SELECTED_CONFIGS "configuration_data/win%i/selected"
34 #define AWAR_CL_DISPLAY_CONFIG_MARKERS "configuration_data/win%i/display"
35 
36 #define AWAR_CONFIG_COMMENT "tmp/configuration/comment"
37 #define AWAR_CONFIGURATION "focus/configuration"
38 
39 typedef map<string, string> ConfigHits; // key=speciesname; value[markerIdx]==1 -> highlighted
40 
41 class ConfigMarkerDisplay FINAL_TYPE : public MarkerDisplay, virtual Noncopyable {
42  GBDATA *gb_main;
43  SmartPtr<ConstStrArray> config; // configuration names
44  StrArray errors; // config load-errors
45  ConfigHits hits;
46 
47  void updateHits() {
48  flush_cache();
49  hits.clear();
50  errors.erase();
51  for (int c = 0; c<size(); ++c) {
53  GBT_config cfg(gb_main, (*config)[c], error);
54 
55  for (int area = 0; area<=1 && !error; ++area) {
56  GBT_config_parser cparser(cfg, area);
57 
58  while (1) {
59  const GBT_config_item& item = cparser.nextItem(error);
60  if (error || item.type == CI_END_OF_CONFIG) break;
61  if (item.type == CI_SPECIES) {
62  ConfigHits::iterator found = hits.find(item.name);
63  if (found == hits.end()) {
64  string h(size(), '0');
65  h[c] = '1';
66  hits[item.name] = h;
67  }
68  else {
69  (found->second)[c] = '1';
70  }
71  }
72  }
73  }
74 
75  errors.put(ARB_strdup(null2empty(error)));
76  }
77  }
78 
79 public:
81  : MarkerDisplay(config_->size()),
82  gb_main(gb_main_),
83  config(config_)
84  {
85  updateHits();
86  }
87  const char *get_marker_name(int markerIdx) const OVERRIDE {
88  const char *error = errors[markerIdx];
89  const char *name = (*config)[markerIdx];
90  if (error && error[0]) return GBS_global_string("%s (Error: %s)", name, error);
91  return name;
92  }
93  void retrieve_marker_state(const char *speciesName, NodeMarkers& node) OVERRIDE {
94  ConfigHits::const_iterator found = hits.find(speciesName);
95  if (found != hits.end()) {
96  const string& hit = found->second;
97 
98  for (int c = 0; c<size(); ++c) {
99  if (hit[c] == '1') node.incMarker(c);
100  }
101  }
102  node.incNodeSize();
103  }
104 
105  void handle_click(int markerIdx, AW_MouseButton button, AWT_graphic_exports& exports) OVERRIDE {
106  if (button == AW_BUTTON_LEFT || button == AW_BUTTON_RIGHT) {
107  const char *markerName = get_marker_name(markerIdx);
108  AW_root::SINGLETON->awar(AWAR_CONFIGURATION)->write_string(markerName); // select config of clicked marker
109  if (button == AW_BUTTON_RIGHT) { // extract configuration
111  exports.request_structure_update(); // request to recalculate branch colors
112  }
113  }
114  }
115 };
116 
117 inline bool displays_config_markers(MarkerDisplay *md) { return dynamic_cast<ConfigMarkerDisplay*>(md); }
118 
119 #define CONFIG_SEPARATOR "\1"
120 
121 inline AW_awar *get_canvas_awar(const char *awar_name_format, int canvas_id) {
122  return AW_root::SINGLETON->awar_no_error(GBS_global_string(awar_name_format, canvas_id));
123 }
124 inline AW_awar *get_config_awar (int canvas_id) { return get_canvas_awar(AWAR_CL_SELECTED_CONFIGS, canvas_id); }
126 
128  // returns configs stored in awar as array (empty array if awar undefined!)
130 
131  AW_awar *awar = get_config_awar(canvas_id);
132  if (awar) {
133  char *config_str = awar->read_string();
135  }
136 
137  return config;
138 }
139 static void write_configs_to_awar(int canvas_id, const CharPtrArray& configs) {
140  char *config_str = GBT_join_strings(configs, CONFIG_SEPARATOR[0]);
142  free(config_str);
143 }
144 
145 // --------------------------------------------------------------------------------
146 
148 static bool allow_selection2awar_update = true;
149 static bool allow_to_activate_display = false;
150 
151 static void init_config_awar(AW_root *root) {
153 }
156  int ntw_id = ntw->get_index();
158  bool redraw = false;
159 
160  if (config->empty() || get_display_toggle_awar(ntw_id)->read_int() == 0) {
161  if (displays_config_markers(agt->get_marker_display())) { // only hide config markers
162  agt->hide_marker_display();
163  redraw = true;
164  }
165  }
166  else {
168 
169  if (activate) {
170  init_config_awar(aw_root); // required here if markers are enabled in saved DB + then right-clicking a marker
171  ConfigMarkerDisplay *disp = new ConfigMarkerDisplay(config, ntw->gb_main);
172  agt->set_marker_display(disp);
173  redraw = true;
174  }
175  }
176 
177  if (selected_configs_list[ntw_id]) { // if configuration_marker_window has been opened
178  // update content of subset-selection (needed when reloading a config-set (not implemented yet) or after renaming a config)
180  awt_set_subset_selection_content(selected_configs_list[ntw_id], *config);
181  }
182 
184 }
185 
187  LocallyModify<bool> allowInteractiveActivation(allow_to_activate_display, true);
189 }
190 
191 static void configs_selectionlist_changed_cb(AW_selection *selected_configs, bool interactive_change, AW_CL ntw_id) {
193  LocallyModify<bool> allowInteractiveActivation(allow_to_activate_display, interactive_change);
194 
195  StrArray config;
196  selected_configs->get_values(config);
197  write_configs_to_awar(ntw_id, config);
198  }
199 }
200 
201 static void config_modified_cb(GBDATA *gb_cfg_area) { // called with "top_area" AND "middle_area" entry!
202  static GBDATA *gb_lastname = NULp;
203  static GB_ULONG lastcall = 0;
204 
205  GBDATA *gb_name = GB_entry(GB_get_father(gb_cfg_area), "name");
206  GB_ULONG thiscall = GB_time_of_day();
207 
208  bool is_same_modification = gb_name == gb_lastname && (thiscall == lastcall || thiscall == (lastcall+1));
209  if (!is_same_modification) { // avoid duplicate check if "top_area" and "middle_area" changed (=standard case)
210  // touch all canvas-specific awars that contain 'name'
211  const char *name = GB_read_char_pntr(gb_name);
212 
213  for (int canvas_id = 0; canvas_id<MAX_NT_WINDOWS; ++canvas_id) {
215  for (size_t c = 0; c<config->size(); ++c) {
216  if (strcmp((*config)[c], name) == 0) {
217  get_config_awar(canvas_id)->touch();
218  break;
219  }
220  }
221  }
222  }
223  gb_lastname = gb_name;
224  lastcall = thiscall;
225 }
226 
227 #define CONFIG_BASE_PATH "/configuration_data/configuration"
228 
230  static bool installed = false;
231  if (!installed) {
232  DatabaseCallback dbcb = makeDatabaseCallback(config_modified_cb);
235 
236  installed = true;
237  }
238 }
239 
241  GBDATA *gb_main = ntw->gb_main;
242 
243  int ntw_idx = ntw->get_index();
244  AW_awar *awar_selCfgs = ntw->awr->awar_string(GBS_global_string(AWAR_CL_SELECTED_CONFIGS, ntw_idx), "", gb_main);
245  awar_selCfgs->add_callback(makeRootCallback(selected_configs_awar_changed_cb, ntw));
246 
247  AW_awar *awar_dispCfgs = ntw->awr->awar_int(GBS_global_string(AWAR_CL_DISPLAY_CONFIG_MARKERS, ntw_idx), 1, gb_main);
248  awar_dispCfgs->add_callback(makeRootCallback(selected_configs_display_awar_changed_cb, ntw));
249 
250  awar_selCfgs->touch(); // force initial refresh
252 }
253 
254 // define where to store config-sets (using config-manager):
255 #define MANAGED_CONFIGSET_SECTION "configmarkers"
256 #define MANAGED_CONFIGSET_ENTRY "selected_configs"
257 
258 static void setup_configmarker_config_cb(AWT_config_definition& config, int ntw_id) {
259  AW_awar *selcfg_awar = get_config_awar(ntw_id);
260  nt_assert(selcfg_awar);
261  if (selcfg_awar) {
262  config.add(selcfg_awar->awar_name, MANAGED_CONFIGSET_ENTRY);
263  }
264 }
265 
266 struct ConfigModifier : virtual Noncopyable {
267  virtual ~ConfigModifier() {}
268  virtual const char *modify(const char *old) const = 0;
269 
270  bool modifyConfig(ConstStrArray& config) const {
271  bool changed = false;
272  for (size_t i = 0; i<config.size(); ++i) {
273  const char *newContent = modify(config[i]);
274  if (!newContent) {
275  config.remove(i);
276  changed = true;
277  }
278  else if (strcmp(newContent, config[i]) != 0) {
279  config.replace(i, newContent);
280  changed = true;
281  }
282  }
283  return changed;
284  }
285 };
286 class ConfigRenamer : public ConfigModifier { // derived from Noncopyable
287  const char *oldName;
288  const char *newName;
289  const char *modify(const char *name) const OVERRIDE {
290  return strcmp(name, oldName) == 0 ? newName : name;
291  }
292 public:
293  ConfigRenamer(const char *oldName_, const char *newName_)
294  : oldName(oldName_),
295  newName(newName_)
296  {}
297 };
298 class ConfigDeleter : public ConfigModifier { // derived from Noncopyable
299  const char *toDelete;
300  const char *modify(const char *name) const OVERRIDE {
301  return strcmp(name, toDelete) == 0 ? NULp : name;
302  }
303 public:
304  ConfigDeleter(const char *toDelete_)
305  : toDelete(toDelete_)
306  {}
307 };
308 
309 static char *correct_managed_configsets_cb(const char *key, const char *value, AW_CL cl_ConfigModifier) {
310  char *modified_value = NULp;
311  if (strcmp(key, MANAGED_CONFIGSET_ENTRY) == 0) {
312  const ConfigModifier *mod = (const ConfigModifier*)cl_ConfigModifier;
313  ConstStrArray config;
315  if (mod->modifyConfig(config)) {
316  modified_value = GBT_join_strings(config, CONFIG_SEPARATOR[0]);
317  }
318  }
319  return modified_value ? modified_value : ARB_strdup(value);
320 }
321 static void modify_configurations(const ConfigModifier& mod) {
322  for (int canvas_id = 0; canvas_id<MAX_NT_WINDOWS; ++canvas_id) {
323  // modify currently selected configs:
325  if (mod.modifyConfig(*config)) {
326  write_configs_to_awar(canvas_id, *config);
327  }
328  }
329  // change all configuration-sets stored in config-manager (shared by all windows)
331 }
332 
334  AW_window_simple *aws = new AW_window_simple;
335  int ntw_id = ntw->get_index();
336  {
337  const char *title = ntw->suffixed_title("Highlight species selections in tree");
338  const char *id = GBS_global_string("MARK_CONFIGS_%i", ntw_id);
339  aws->init(root, id, title);
340  }
341  aws->load_xfig("mark_configs.fig");
342 
343  aws->auto_space(10, 10);
344 
345  aws->at("close");
346  aws->callback(AW_POPDOWN);
347  aws->create_button("CLOSE", "CLOSE", "C");
348 
349  aws->at("help");
350  aws->callback(makeHelpCallback("species_configs_highlight.hlp"));
351  aws->create_button("HELP", "HELP", "H");
352 
353 
354  aws->at("list");
356  AW_selection *sub_sel;
357  {
358  LocallyModify<bool> avoid(allow_selection2awar_update, false); // avoid awar gets updated from empty sub-selectionlist
359  sub_sel = awt_create_subset_selection_list(aws, all_configs->get_sellist(), "selected", "add", "sort", false, configs_selectionlist_changed_cb, ntw->get_index());
360  }
361 
363  selected_configs_list[ntw_id] = sub_sel;
364 
365  // @@@ would like to use ntw-specific awar for this selection list (opening two lists links them)
366 
367  aws->at("show");
368  aws->label("Display?");
369  aws->create_toggle(get_display_toggle_awar(ntw_id)->awar_name);
370 
371  aws->at("settings");
372  aws->callback(TREE_create_marker_settings_window);
373  aws->create_autosize_button("SETTINGS", "Settings", "S");
374 
376 
377  return aws;
378 }
379 
382 
383 public:
384  NtSelectionAdmin(TREE_canvas *ntw_) : ntw(ntw_) {}
385 
386  const char *get_macro_suffix() const { return GBS_global_string("%i", ntw->get_index()); }
387  GBDATA *get_gb_main() const { return ntw->get_graphic_tree()->get_gbmain(); }
388 
389  const char *get_selection_awarname() const { return AWAR_CONFIGURATION; }
390  const char *get_selectionComment_awarname() const { return AWAR_CONFIG_COMMENT; }
391 
392  const char *get_window_title() const { return ntw->suffixed_title("Species selections"); }
393 
394  const char *get_name_of_tree() const { return ntw->get_awar_tree()->read_char_pntr(); }
395  TreeNode *get_tree_root() const { return ntw->get_tree_root_node(); }
396 
397  const char *get_toparea_SAIs() const {
399  }
400 
401  void speciesSelection_renamed_cb(const char *old_name, const char *new_name) const { modify_configurations(ConfigRenamer(old_name, new_name)); }
402  void speciesSelection_deleted_cb(const char *name) const { modify_configurations(ConfigDeleter(name)); }
403 };
404 
405 
407  // Note: these windows have to be tree-canvas-related,
408  // because species selections need to reflect the topology of the tree shown in canvas.
409  //
410  // We have to use a custom popup method, because there exist multiple callbacks for the same canvas.
411 
412  static AW_window *existing_aws[MAX_NT_WINDOWS] = { MAX_NT_WINDOWS_NULLINIT };
413 
414  int ntw_id = ntw->get_index();
415  if (!existing_aws[ntw_id]) {
416  AW_root *root = aw_main->get_root();
417 
418  NtSelectionAdmin * const admin = new NtSelectionAdmin(ntw); // bound to callbacks (inside create_species_selection_window)
419  AW_window *aws = create_species_selection_window(root, admin);
420 
421  aws->at("highlight");
422  aws->callback(makeCreateWindowCallback(create_configuration_marker_window, ntw));
423  aws->create_autosize_button(GBS_global_string("HIGHLIGHT_%i", ntw_id), "Highlight in tree", "t");
424  // @@@ no need to localize HIGHLIGHT button id (alias as in ../SL/SPECSEL/selection_admin.cxx@alias_remote_command)
425 
426  existing_aws[ntw_id] = aws;
427  }
428  existing_aws[ntw_id]->activate();
429 }
430 
431 // -----------------------------------------
432 // various ways to start the editor
433 
435  aww->hide();
436 
437  const char *cfgName = aww->get_root()->awar(AWAR_CONFIGURATION)->read_char_pntr();
438  char *quotedCfg = GBK_singlequote(cfgName);
439 
440  AW_system(GBS_global_string("arb_edit4 -c %s &", quotedCfg));
441 
442  free(quotedCfg);
443 }
444 
446  static AW_window_simple *aws = NULp;
447  if (!aws) {
448  init_config_awar(awr);
449 
450  aws = new AW_window_simple;
451  aws->init(awr, "SELECT_CONFIGURATION", "SELECT A CONFIGURATION");
452  aws->at(10, 10);
453  aws->auto_space(0, 0);
455  aws->at_newline();
456 
457  aws->callback(nt_start_editor_on_configuration);
458  aws->create_button("START", "START");
459 
460  aws->callback(AW_POPDOWN);
461  aws->create_button("CLOSE", "CLOSE", "C");
462 
463  aws->window_fit();
464  }
465  return aws;
466 }
467 
468 void NT_start_editor_on_tree(AW_window*, int use_species_aside, TREE_canvas *ntw) {
469  NtSelectionAdmin def(ntw);
471  if (!error) error = GBK_system("arb_edit4 -c " DEFAULT_CONFIGURATION " &");
472  aw_message_if(error);
473 }
474 
476  const char *dated_suffix = ARB_dateTime_suffix();
477  char *configName = GBS_global_string_copy("imported_%s", dated_suffix);
478 
479  // ensure unique config-name
480  {
481  int unique = 1;
482  GB_transaction ta(ntw->gb_main);
483  while (GBT_find_configuration(ntw->gb_main, configName)) {
484  freeset(configName, GBS_global_string_copy("imported_%s_%i", dated_suffix, ++unique));
485  }
486  }
487 
488  NtSelectionAdmin def(ntw);
489  GB_ERROR error = create_species_selection(def, configName, 0, FROM_IMPORTER);
490  aw_message_if(error);
491 
492  free(configName);
493 }
494 
495 void NT_create_config_after_import(TREE_canvas *ntw, bool imported_from_scratch) {
501  if (imported_from_scratch) {
503  }
504  else {
505  GB_transaction ta(ntw->gb_main);
506 
507  // remember marks + mark queried species:
508  for (GBDATA *gb_species = GBT_first_species(ntw->gb_main); gb_species; gb_species = GBT_next_species(gb_species)) {
509  GB_write_user_flag(gb_species, GB_USERFLAG_WASMARKED, GB_read_flag(gb_species));
510  GB_write_flag(gb_species, GB_user_flag(gb_species, GB_USERFLAG_QUERY));
511  }
512 
514 
515  // restore old marks:
516  for (GBDATA *gb_species = GBT_first_species(ntw->gb_main); gb_species; gb_species = GBT_next_species(gb_species)) {
517  GB_write_flag(gb_species, GB_user_flag(gb_species, GB_USERFLAG_WASMARKED));
519  }
520  }
521 }
522 
void NT_popup_configuration_admin(AW_window *aw_main, TREE_canvas *ntw)
Definition: NT_edconf.cxx:406
GB_ERROR GBK_system(const char *system_command)
Definition: arb_msg.cxx:571
AWT_graphic_tree * get_graphic_tree() const
void set_marker_display(MarkerDisplay *display)
const char * get_toparea_SAIs() const
Definition: NT_edconf.cxx:397
GBDATA * get_gb_main() const
Definition: NT_edconf.cxx:387
static AW_selection * selected_configs_list[MAX_NT_WINDOWS]
Definition: NT_edconf.cxx:147
void add(const char *awar_name, const char *config_name)
size_t size() const
Definition: arb_strarray.h:85
AW_window * NT_create_startEditorOnOldConfiguration_window(AW_root *awr)
Definition: NT_edconf.cxx:445
static void selected_configs_display_awar_changed_cb(AW_root *root, TREE_canvas *ntw)
Definition: NT_edconf.cxx:186
#define GB_USERFLAG_WASMARKED
Definition: arbdb.h:56
void NT_create_config_after_import(TREE_canvas *ntw, bool imported_from_scratch)
Definition: NT_edconf.cxx:495
GB_ERROR GB_add_hierarchy_callback(GBDATA *gb_main, const char *db_path, GB_CB_TYPE type, const DatabaseCallback &dbcb)
Definition: ad_cb.cxx:432
void speciesSelection_deleted_cb(const char *name) const
Definition: NT_edconf.cxx:402
void AWT_insert_config_manager(AW_window *aww, AW_default default_file_, const char *id, const StoreConfigCallback &store_cb, const RestoreConfigCallback &load_or_reset_cb, const char *macro_id, const AWT_predefined_config *predef)
static AW_window * create_configuration_marker_window(AW_root *root, TREE_canvas *ntw)
Definition: NT_edconf.cxx:333
#define CONFIG_SEPARATOR
Definition: NT_edconf.cxx:119
#define ASSERT_NO_ERROR(errorExpr)
Definition: arb_assert.h:360
TreeNode * get_tree_root() const
Definition: NT_edconf.cxx:395
void at(int x, int y)
Definition: AW_at.cxx:93
void speciesSelection_renamed_cb(const char *old_name, const char *new_name) const
Definition: NT_edconf.cxx:401
#define AWAR_CONFIG_COMMENT
Definition: NT_edconf.cxx:36
#define AWAR_CL_DISPLAY_CONFIG_MARKERS
Definition: NT_edconf.cxx:34
char * ARB_strdup(const char *str)
Definition: arb_string.h:27
long read_int() const
Definition: AW_awar.cxx:184
const char * get_selectionComment_awarname() const
Definition: NT_edconf.cxx:390
const char * GBS_global_string(const char *templat,...)
Definition: arb_msg.cxx:203
AW_root * awr
Definition: canvas.hxx:348
const char * title
Definition: readseq.c:22
STL namespace.
void AW_POPDOWN(AW_window *window)
Definition: AW_window.cxx:52
#define MANAGED_CONFIGSET_ENTRY
Definition: NT_edconf.cxx:256
GBDATA * get_gbmain() const
void get_values(StrArray &intoArray)
Definition: aw_select.hxx:198
bool modifyConfig(ConstStrArray &config) const
Definition: NT_edconf.cxx:270
ConfigRenamer(const char *oldName_, const char *newName_)
Definition: NT_edconf.cxx:293
GBDATA * GB_get_father(GBDATA *gbd)
Definition: arbdb.cxx:1722
AW_awar * get_config_awar(int canvas_id)
Definition: NT_edconf.cxx:124
void activate()
Definition: aw_window.hxx:368
#define MAX_NT_WINDOWS_NULLINIT
Definition: NT_local.h:33
bool empty() const
Definition: arb_strarray.h:86
unsigned long GB_ULONG
Definition: arbdb_base.h:42
ConfigDeleter(const char *toDelete_)
Definition: NT_edconf.cxx:304
#define DEFAULT_CONFIGURATION
Definition: ad_config.h:30
static SmartPtr< ConstStrArray > get_selected_configs_from_awar(int canvas_id)
Definition: NT_edconf.cxx:127
#define DOWNCAST(totype, expr)
Definition: downcast.h:141
ConfigMarkerDisplay(SmartPtr< ConstStrArray > config_, GBDATA *gb_main_)
Definition: NT_edconf.cxx:80
const char * suffixed_title(const char *primary_title) const
const char * ARB_dateTime_suffix()
Definition: arb_string.cxx:54
AW_awar * add_callback(const RootCallback &cb)
Definition: AW_awar.cxx:231
void NT_start_editor_on_tree(AW_window *, int use_species_aside, TREE_canvas *ntw)
Definition: NT_edconf.cxx:468
static struct aisc_static_set_mem md
#define AWAR_CL_SELECTED_CONFIGS
Definition: NT_edconf.cxx:33
const char * read_char_pntr() const
Definition: AW_awar.cxx:168
bool GB_user_flag(GBDATA *gbd, unsigned char user_bit)
Definition: arbdb.cxx:2750
void AW_system(const char *command)
Definition: AW_help.cxx:32
static AW_root * SINGLETON
Definition: aw_root.hxx:102
AW_window * TREE_create_marker_settings_window(AW_root *root)
WindowCallback makeHelpCallback(const char *helpfile)
Definition: aw_window.hxx:106
void AWT_modify_managed_configs(AW_default default_file, const char *id, ConfigModifyCallback mod_cb, AW_CL cl_user)
static char * correct_managed_configsets_cb(const char *key, const char *value, AW_CL cl_ConfigModifier)
Definition: NT_edconf.cxx:309
AW_MouseButton
Definition: aw_window.hxx:70
const char * get_selection_awarname() const
Definition: NT_edconf.cxx:389
static void config_modified_cb(GBDATA *gb_cfg_area)
Definition: NT_edconf.cxx:201
void hide_marker_display()
bool displays_config_markers(MarkerDisplay *md)
Definition: NT_edconf.cxx:117
static void selected_configs_awar_changed_cb(AW_root *aw_root, TREE_canvas *ntw)
Definition: NT_edconf.cxx:154
GBT_CONFIG_ITEM_TYPE type
Definition: ad_config.h:83
MarkerDisplay * get_marker_display()
static void modify_configurations(const ConfigModifier &mod)
Definition: NT_edconf.cxx:321
#define MAX_NT_WINDOWS
Definition: NT_local.h:32
TreeNode * get_tree_root_node() const
virtual ~ConfigModifier()
Definition: NT_edconf.cxx:267
void touch()
Definition: AW_awar.cxx:207
static void error(const char *msg)
Definition: mkptypes.cxx:96
#define AWAR_TREE_REFRESH
void remove(int i)
static void install_config_change_callbacks(GBDATA *gb_main)
Definition: NT_edconf.cxx:229
static bool allow_selection2awar_update
Definition: NT_edconf.cxx:148
GB_ULONG GB_time_of_day(void)
Definition: adsocket.cxx:358
AW_DB_selection * awt_create_CONFIG_selection_list(GBDATA *gb_main, AW_window *aws, const char *varname)
Definition: sel_boxes.cxx:459
static void init_config_awar(AW_root *root)
Definition: NT_edconf.cxx:151
AW_awar * get_canvas_awar(const char *awar_name_format, int canvas_id)
Definition: NT_edconf.cxx:121
AW_awar * get_display_toggle_awar(int canvas_id)
Definition: NT_edconf.cxx:125
static void nt_start_editor_on_configuration(AW_window *aww)
Definition: NT_edconf.cxx:434
map< string, string > ConfigHits
Definition: NT_edconf.cxx:39
int GB_read_flag(GBDATA *gbd)
Definition: arbdb.cxx:2796
char * read_string() const
Definition: AW_awar.cxx:198
AW_awar * awar_no_error(const char *awar)
end timer stuff
Definition: AW_root.cxx:601
const char * get_macro_suffix() const
Definition: NT_edconf.cxx:386
AW_window * create_species_selection_window(AW_root *root, const SelectionAdmin *selection)
AW_awar * awar(const char *awar)
Definition: AW_root.cxx:606
AW_selection * awt_create_subset_selection_list(AW_window *aww, AW_selection_list *parent_selection, const char *at_box, const char *at_add, const char *at_sort, bool autocorrect_subselection, SubsetChangedCb subChanged_cb, AW_CL cl_user)
Definition: sel_boxes.cxx:1171
GBDATA * GBT_find_configuration(GBDATA *gb_main, const char *name)
Definition: ad_config.cxx:58
void create_autosize_button(const char *macro_name, AW_label label, const char *mnemonic=NULp, unsigned xtraSpace=1)
Definition: AW_button.cxx:421
const char * get_marker_name(int markerIdx) const OVERRIDE
Definition: NT_edconf.cxx:87
static void configs_selectionlist_changed_cb(AW_selection *selected_configs, bool interactive_change, AW_CL ntw_id)
Definition: NT_edconf.cxx:191
int get_index() const
void extract_species_selection(GBDATA *gb_main, const char *selectionName, SelectionExtractType ext_type)
#define nt_assert(cond)
Definition: NT_local.h:27
NtSelectionAdmin(TREE_canvas *ntw_)
Definition: NT_edconf.cxx:384
char * awar_name
Definition: aw_awar.hxx:103
static void setup_configmarker_config_cb(AWT_config_definition &config, int ntw_id)
Definition: NT_edconf.cxx:258
AWT_graphic * gfx
Definition: canvas.hxx:349
char * GBT_join_strings(const CharPtrArray &strings, char separator)
#define AWAR_TOPAREA_SAIS
Definition: NT_local.h:30
AW_awar * awar_int(const char *var_name, long default_value=0, AW_default default_file=AW_ROOT_DEFAULT)
Definition: AW_root.cxx:632
#define CONFIG_BASE_PATH
Definition: NT_edconf.cxx:227
xml element
void NT_activate_configMarkers_display(TREE_canvas *ntw)
Definition: NT_edconf.cxx:240
char * GBK_singlequote(const char *arg)
Definition: arb_msg.cxx:599
const char * get_window_title() const
Definition: NT_edconf.cxx:392
void GB_write_flag(GBDATA *gbd, long flag)
Definition: arbdb.cxx:2773
long AW_CL
Definition: cb.h:21
void GB_write_user_flag(GBDATA *gbd, unsigned char user_bit, bool state)
Definition: arbdb.cxx:2765
const GBT_config_item & nextItem(GB_ERROR &error)
Definition: ad_config.cxx:140
#define OVERRIDE
Definition: cxxforward.h:112
void nt_create_config_after_import(TREE_canvas *ntw)
Definition: NT_edconf.cxx:475
void awt_set_subset_selection_content(AW_selection *subset_sel_, const CharPtrArray &values)
Definition: sel_boxes.cxx:1201
#define AWAR_CONFIGURATION
Definition: NT_edconf.cxx:37
GBDATA * GBT_first_species(GBDATA *gb_main)
Definition: aditem.cxx:124
void hide()
Definition: AW_window.cxx:1828
void GB_clear_user_flag(GBDATA *gbd, unsigned char user_bit)
Definition: arbdb.cxx:2760
#define MANAGED_CONFIGSET_SECTION
Definition: NT_edconf.cxx:255
AW_root * get_root()
Definition: aw_window.hxx:362
GBDATA * GBT_next_species(GBDATA *gb_species)
Definition: aditem.cxx:128
#define NULp
Definition: cxxforward.h:116
GBDATA * gb_main
Definition: NT_local.h:37
static void write_configs_to_awar(int canvas_id, const CharPtrArray &configs)
Definition: NT_edconf.cxx:139
void retrieve_marker_state(const char *speciesName, NodeMarkers &node) OVERRIDE
Definition: NT_edconf.cxx:93
GB_ERROR write_string(const char *aw_string)
void GBT_split_string(ConstStrArray &dest, const char *namelist, const char *separator, SplitMode mode)
Definition: arb_strarray.h:223
#define GB_USERFLAG_QUERY
Definition: arbdb.h:55
const char * get_name_of_tree() const
Definition: NT_edconf.cxx:394
void handle_click(int markerIdx, AW_MouseButton button, AWT_graphic_exports &exports) OVERRIDE
Definition: NT_edconf.cxx:105
GB_ERROR create_species_selection(const SelectionAdmin &selection, const char *conf_name, int use_species_aside, SelectionCreation creation)
GB_transaction ta(gb_var)
void callback(const WindowCallback &cb)
Definition: AW_window.cxx:142
GB_CSTR GB_read_char_pntr(GBDATA *gbd)
Definition: arbdb.cxx:904
GBDATA * gb_main
Definition: adname.cxx:32
AW_awar * awar_string(const char *var_name, const char *default_value="", AW_default default_file=AW_ROOT_DEFAULT)
Definition: AW_root.cxx:622
void GBT_splitNdestroy_string(ConstStrArray &names, char *&namelist, const char *separator, SplitMode mode)
const char * replace(int i, const char *elem)
Definition: arb_strarray.h:206
AW_awar * get_awar_tree() const
GBDATA * GB_entry(GBDATA *father, const char *key)
Definition: adquery.cxx:334
AW_selection_list * get_sellist()
Definition: aw_select.hxx:196
void aw_message_if(GB_ERROR error)
Definition: aw_msg.hxx:21
char * GBS_global_string_copy(const char *templat,...)
Definition: arb_msg.cxx:194
NT_global GLOBAL
Definition: NT_main.cxx:47
GBDATA * gb_main
Definition: canvas.hxx:346
static bool allow_to_activate_display
Definition: NT_edconf.cxx:149