ARB
map_key.cxx
Go to the documentation of this file.
1 // ================================================================ //
2 // //
3 // File : map_key.cxx //
4 // Purpose : customizable key mapping //
5 // //
6 // Institute of Microbiology (Technical University Munich) //
7 // http://www.arb-home.de/ //
8 // //
9 // ================================================================ //
10 
11 #include "map_key.hxx"
12 
13 #include "config_manager.hxx"
14 
15 #include <aw_window.hxx>
16 #include <aw_root.hxx>
17 #include <aw_awar.hxx>
18 
19 #include <arb_msg.h>
20 
21 #define KEYS_PER_COLUMN 10
22 #define MAPPED_KEYS (2*KEYS_PER_COLUMN)
23 
24 #define AWAR_KEYMAPPING_ENABLE "key_mapping/enable"
25 
27  int i;
28  for (i=0; i<256; i++) mapping[i] = i;
29 }
30 
31 char ed_key::map_key(char k) const {
32  int i = k & 0xff;
33  return mapping[i];
34 }
35 
36 inline const char *mapping_awar_name(int idx, const char *subkey) {
37  return GBS_global_string("key_mapping/key_%i/%s", idx, subkey);
38 }
39 inline char read_mapping_awar(AW_root *awr, int idx, const char *subkey) {
40  const char *awar_content = awr->awar(mapping_awar_name(idx, subkey))->read_char_pntr();
41  return awar_content[0];
42 }
43 
45  for (int i=0; i<256; i++) mapping[i] = i;
46 
47  long enable = awr->awar(AWAR_KEYMAPPING_ENABLE)->read_int();
48  if (enable) {
49  for (int i=0; i<MAPPED_KEYS; i++) {
50  char source = read_mapping_awar(awr, i, "source");
51  char dest = read_mapping_awar(awr, i, "dest");
52 
53  if (source && dest) mapping[safeCharIndex(source)] = dest;
54  }
55  }
56 }
57 
58 static void ed_rehash_mapping(AW_root *awr, ed_key *ek) {
59  ek->rehash_mapping(awr);
60 }
61 
63  RootCallback rehash_mapping_cb = makeRootCallback(ed_rehash_mapping, this);
64 
65  for (int i=0; i<MAPPED_KEYS; i++) {
66  awr->awar_string(mapping_awar_name(i, "source"))->add_callback(rehash_mapping_cb);
67  awr->awar_string(mapping_awar_name(i, "dest"))->add_callback(rehash_mapping_cb);
68  }
69  awr->awar_int(AWAR_KEYMAPPING_ENABLE, 1)->add_callback(rehash_mapping_cb);
70  rehash_mapping(awr);
71 }
72 
74  for (int i=0; i<MAPPED_KEYS; i++) {
75  cdef.add(mapping_awar_name(i, "source"), GBS_global_string("src%02i", i));
76  cdef.add(mapping_awar_name(i, "dest"), GBS_global_string("dst%02i", i));
77  }
78 }
79 
81  AW_window_simple *aws = new AW_window_simple;
82  aws->init(root, "KEY_MAPPINGS", "KEY MAPPINGS");
83  aws->load_xfig("ed_key.fig");
84 
85  aws->callback(AW_POPDOWN);
86  aws->at("close");
87  aws->create_button("CLOSE", "CLOSE", "C");
88 
89  aws->callback(makeHelpCallback("nekey_map.hlp"));
90  aws->at("help");
91  aws->create_button("HELP", "HELP", "H");
92 
93  aws->at("enable");
94  aws->create_toggle(AWAR_KEYMAPPING_ENABLE);
95 
96  aws->at("config");
97  AWT_insert_config_manager(aws, AW_ROOT_DEFAULT, "keymap", makeConfigSetupCallback(setup_keymap_config));
98 
99  aws->auto_space(10, 10);
100 
101  aws->at("ascii2"); int ax2 = aws->get_at_xposition();
102  aws->at("ascii1"); int ax1 = aws->get_at_xposition();
103  aws->at("key2"); int kx2 = aws->get_at_xposition();
104  aws->at("key1"); int kx1 = aws->get_at_xposition();
105 
106  int y = aws->get_at_yposition();
107 
108  for (int i=0; i<KEYS_PER_COLUMN; ++i) {
109  aws->at(kx1, y); aws->create_input_field(mapping_awar_name(i, "source"), 2);
110  aws->at(ax1, y); aws->create_input_field(mapping_awar_name(i, "dest"), 2);
111  aws->at(kx2, y); aws->create_input_field(mapping_awar_name(i+KEYS_PER_COLUMN, "source"), 2);
112  aws->at(ax2, y); aws->create_input_field(mapping_awar_name(i+KEYS_PER_COLUMN, "dest"), 2);
113 
114  aws->at_newline();
115  y = aws->get_at_yposition();
116  }
117 
118  return aws;
119 }
120 
#define KEYS_PER_COLUMN
Definition: map_key.cxx:21
AW_window * create_key_map_window(AW_root *root)
Definition: map_key.cxx:80
void add(const char *awar_name, const char *config_name)
static char * y[maxsp+1]
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)
CONSTEXPR_INLINE unsigned char safeCharIndex(char c)
Definition: dupstr.h:73
void load_xfig(const char *file, bool resize=true)
Definition: AW_window.cxx:720
static void ed_rehash_mapping(AW_root *awr, ed_key *ek)
Definition: map_key.cxx:58
long read_int() const
Definition: AW_awar.cxx:184
const char * GBS_global_string(const char *templat,...)
Definition: arb_msg.cxx:203
void AW_POPDOWN(AW_window *window)
Definition: AW_window.cxx:52
AW_awar * add_callback(const RootCallback &cb)
Definition: AW_awar.cxx:231
char map_key(char) const
Definition: map_key.cxx:31
const char * read_char_pntr() const
Definition: AW_awar.cxx:168
ed_key()
Definition: map_key.cxx:26
WindowCallback makeHelpCallback(const char *helpfile)
Definition: aw_window.hxx:106
void create_awars(AW_root *root)
Definition: map_key.cxx:62
void rehash_mapping(AW_root *awr)
Definition: map_key.cxx:44
const char * mapping_awar_name(int idx, const char *subkey)
Definition: map_key.cxx:36
#define AWAR_KEYMAPPING_ENABLE
Definition: map_key.cxx:24
char read_mapping_awar(AW_root *awr, int idx, const char *subkey)
Definition: map_key.cxx:39
AW_awar * awar(const char *awar)
Definition: AW_root.cxx:554
AW_awar * awar_int(const char *var_name, long default_value=0, AW_default default_file=AW_ROOT_DEFAULT)
Definition: AW_root.cxx:580
static void setup_keymap_config(AWT_config_definition &cdef)
Definition: map_key.cxx:73
#define MAPPED_KEYS
Definition: map_key.cxx:22
AW_awar * awar_string(const char *var_name, const char *default_value="", AW_default default_file=AW_ROOT_DEFAULT)
Definition: AW_root.cxx:570
#define AW_ROOT_DEFAULT
Definition: aw_base.hxx:106