source: tags/arb-6.0-rc3/AWT/AWT_map_key.cxx

Last change on this file was 12267, checked in by westram, 10 years ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.2 KB
Line 
1// ================================================================ //
2//                                                                  //
3//   File      : AWT_map_key.cxx                                    //
4//   Purpose   :                                                    //
5//                                                                  //
6//   Institute of Microbiology (Technical University Munich)        //
7//   http://www.arb-home.de/                                        //
8//                                                                  //
9// ================================================================ //
10
11#include "awt_map_key.hxx"
12#include <arb_msg.h>
13#include <aw_window.hxx>
14#include <aw_root.hxx>
15#include <aw_awar.hxx>
16
17ed_key::ed_key() {
18    int i;
19    for (i=0; i<256; i++) mapping[i] = i;
20}
21
22char ed_key::map_key(char k) const {
23    int i = k & 0xff;
24    return mapping[i];
25}
26
27inline char read_mapping_awar(AW_root *awr, int idx, const char *subkey) {
28    const char *awar_name    = GBS_global_string("key_mapping/key_%i/%s", idx, subkey);
29    const char *awar_content = awr->awar(awar_name)->read_char_pntr();
30    return awar_content[0];
31}
32
33void ed_key::rehash_mapping(AW_root *awr) {
34    for (int i=0; i<256; i++) mapping[i] = i;
35
36    long enable = awr->awar("key_mapping/enable")->read_int();
37    if (enable) {
38        for (int i=0; i<MAX_MAPPED_KEYS; i++) {
39            char source = read_mapping_awar(awr, i, "source");
40            char dest   = read_mapping_awar(awr, i, "dest");
41
42            if (source && dest) mapping[safeCharIndex(source)] = dest;
43        }
44    }
45}
46
47static void ed_rehash_mapping(AW_root *awr, ed_key *ek) {
48    ek->rehash_mapping(awr);
49}
50
51void ed_key::create_awars(AW_root *awr) {
52    RootCallback rehash_mapping_cb = makeRootCallback(ed_rehash_mapping, this);
53
54    for (int i=0; i<MAX_MAPPED_KEYS; i++) {
55        char source[256]; sprintf(source, "key_mapping/key_%i/source", i);
56        char dest[256];   sprintf(dest,   "key_mapping/key_%i/dest",   i);
57        awr->awar_string(source, "", AW_ROOT_DEFAULT); awr->awar(source)->add_callback(rehash_mapping_cb);
58        awr->awar_string(dest,   "", AW_ROOT_DEFAULT); awr->awar(dest)  ->add_callback(rehash_mapping_cb);
59    }
60    awr->awar_int("key_mapping/enable", 1, AW_ROOT_DEFAULT);
61    awr->awar("key_mapping/enable")->add_callback(rehash_mapping_cb);
62    rehash_mapping(awr);
63}
64
65AW_window *create_key_map_window(AW_root *root)
66{
67    AW_window_simple *aws = new AW_window_simple;
68    aws->init(root, "KEY_MAPPING_PROPS", "KEY MAPPINGS");
69    aws->load_xfig("ed_key.fig");
70
71    aws->callback((AW_CB0)AW_POPDOWN);
72    aws->at("close");
73    aws->create_button("CLOSE", "CLOSE", "C");
74
75    aws->callback(makeHelpCallback("nekey_map.hlp"));
76    aws->at("help");
77    aws->create_button("HELP", "HELP", "H");
78
79    aws->at("data");
80    aws->auto_space(10, 0);
81
82    char source[256];
83    char dest[256];
84    int i;
85    for (i=0; i<MAX_MAPPED_KEYS; i++) {
86        sprintf(source, "key_mapping/key_%i/source", i);
87        sprintf(dest, "key_mapping/key_%i/dest", i);
88        aws->create_input_field(source, 3);
89        aws->create_input_field(dest, 3);
90        aws->at_newline();
91    }
92    aws->at("enable");
93    aws->create_toggle("key_mapping/enable");
94    return (AW_window *)aws;
95}
96
Note: See TracBrowser for help on using the repository browser.