1 | #include <stdio.h> |
---|
2 | #include <stdlib.h> |
---|
3 | #include <arbdb.h> |
---|
4 | #include <arbdbt.h> |
---|
5 | #include <aw_root.hxx> |
---|
6 | #include <aw_device.hxx> |
---|
7 | #include <aw_window.hxx> |
---|
8 | #include <aw_awars.hxx> |
---|
9 | |
---|
10 | #define nt_assert(bed) arb_assert(bed) |
---|
11 | |
---|
12 | extern GBDATA *GLOBAL_gb_main; /* muss existieren */ |
---|
13 | |
---|
14 | void create_insertchar_variables(AW_root *root,AW_default db1) |
---|
15 | { |
---|
16 | root->awar_int (AWAR_CURSOR_POSITION, 0, GLOBAL_gb_main); |
---|
17 | root->awar_int ("insertchar/nchar", 0, db1)->set_minmax( 0, 999000); |
---|
18 | root->awar_string("insertchar/characters", "", db1); |
---|
19 | } |
---|
20 | |
---|
21 | void awt_inserchar_event(AW_window *aws,AW_CL awcl_mode) |
---|
22 | { |
---|
23 | int mode = (int)awcl_mode; // 1 = insert, -1 = delete |
---|
24 | nt_assert(mode == -1 || mode == 1); |
---|
25 | |
---|
26 | AW_root *root = aws->get_root(); |
---|
27 | long pos = root->awar(AWAR_CURSOR_POSITION)->read_int()-1; |
---|
28 | long nchar = root->awar("insertchar/nchar")->read_int() * mode; |
---|
29 | char *deletes = root->awar("insertchar/characters")->read_string(); |
---|
30 | |
---|
31 | GB_ERROR error = GB_begin_transaction(GLOBAL_gb_main); |
---|
32 | if (!error) { |
---|
33 | char *alignment = GBT_get_default_alignment(GLOBAL_gb_main); |
---|
34 | |
---|
35 | if (alignment) { |
---|
36 | error = GBT_insert_character(GLOBAL_gb_main,alignment,pos,nchar,deletes); |
---|
37 | if (!error) error = GBT_check_data(GLOBAL_gb_main,0); |
---|
38 | } |
---|
39 | else { |
---|
40 | error = "no alignment found"; |
---|
41 | } |
---|
42 | free(alignment); |
---|
43 | } |
---|
44 | |
---|
45 | GB_end_transaction_show_error(GLOBAL_gb_main, error, aw_message); |
---|
46 | free(deletes); |
---|
47 | } |
---|
48 | |
---|
49 | AW_window *create_insertchar_window(AW_root *root, AW_default def) |
---|
50 | { |
---|
51 | AWUSE(root); |
---|
52 | AWUSE(def); |
---|
53 | |
---|
54 | static AW_window_simple *aws = 0; |
---|
55 | if (aws) return aws; |
---|
56 | aws = new AW_window_simple; |
---|
57 | |
---|
58 | aws->init( root, "INSERT_COLOUM", "INSERT CHAR"); |
---|
59 | |
---|
60 | aws->load_xfig("inschar.fig"); |
---|
61 | aws->button_length(8); |
---|
62 | |
---|
63 | aws->callback( (AW_CB0)AW_POPDOWN); |
---|
64 | aws->at("close"); |
---|
65 | aws->create_button("CLOSE","CLOSE","C"); |
---|
66 | |
---|
67 | aws->callback( AW_POPUP_HELP,(AW_CL)"insdelchar.hlp"); |
---|
68 | aws->at("help"); |
---|
69 | aws->create_button("HELP","HELP","H"); |
---|
70 | |
---|
71 | aws->label_length(27); |
---|
72 | |
---|
73 | aws->at("pos"); |
---|
74 | aws->label("Sequence Position"); |
---|
75 | aws->create_input_field(AWAR_CURSOR_POSITION,6); // @@@ mit EDIT4-Cursor-position linken |
---|
76 | |
---|
77 | aws->at("len"); |
---|
78 | aws->label("How many Characters"); |
---|
79 | aws->create_input_field("insertchar/nchar",6); |
---|
80 | |
---|
81 | aws->at("characters"); |
---|
82 | aws->label("Delete Only (% = all)"); |
---|
83 | aws->create_input_field("insertchar/characters",6); |
---|
84 | |
---|
85 | aws->callback(awt_inserchar_event,(AW_CL)1); |
---|
86 | aws->at("insert"); |
---|
87 | aws->create_button("INSERT","INSERT","I"); |
---|
88 | |
---|
89 | aws->callback(awt_inserchar_event,(AW_CL)-1); |
---|
90 | aws->at("delete"); |
---|
91 | aws->create_button("DELETE","DELETE","D"); |
---|
92 | |
---|
93 | return (AW_window *)aws; |
---|
94 | } |
---|