source: tags/arb_5.1/MERGE/MG_extendeds.cxx

Last change on this file was 5852, checked in by westram, 15 years ago
  • followup to [5851] (more to follow)
    • GB_get_error() → GB_await_error() where appropriate (MERGE)
    • fixed error handling in several functions
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.7 KB
Line 
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 <awt.hxx>
9#include <awt_sel_boxes.hxx>
10#include <aw_awars.hxx>
11#include <db_scanner.hxx>
12#include "merge.hxx"
13
14#define AWAR_EX_NAME1 "tmp/merge1/extended_name"
15#define AWAR_EX_DEST1 "tmp/merge1/extended_dest"
16#define AWAR_EX_NAME2 "tmp/merge2/extended_name"
17#define AWAR_EX_DEST2 "tmp/merge2/extended_dest"
18
19void MG_create_extendeds_awars(AW_root *aw_root, AW_default aw_def)
20{
21    aw_root->awar_string( AWAR_EX_NAME1, "" ,   aw_def);
22    aw_root->awar_string( AWAR_EX_DEST1, "" ,   aw_def);
23    aw_root->awar_string( AWAR_EX_NAME2, "" ,   aw_def);
24    aw_root->awar_string( AWAR_EX_DEST2, "" ,   aw_def);
25}
26
27void MG_extended_rename_cb(AW_window *aww,GBDATA *gbmain, int ex_nr) {
28    char *source = aww->get_root()->awar(GBS_global_string("tmp/merge%i/extended_name", ex_nr))->read_string();
29    char *dest   = aww->get_root()->awar(GBS_global_string("tmp/merge%i/extended_dest", ex_nr))->read_string();
30
31    GB_ERROR error = GB_begin_transaction(gbmain);
32    if (!error) {
33        GBDATA *gb_sai_data     = GBT_get_SAI_data(gbmain);
34        if (!gb_sai_data) error = GB_await_error();
35        else {
36            GBDATA *gb_sai      = GBT_find_SAI_rel_SAI_data(gb_sai_data, source);
37            GBDATA *gb_dest_sai = GBT_find_SAI_rel_SAI_data(gb_sai_data, dest);
38
39            if (gb_dest_sai) error  = GBS_global_string("SAI '%s' already exists", dest);
40            else if (!gb_sai) error = "Please select a SAI";
41            else error              = GBT_write_string(gb_sai, "name", dest);
42        }
43    }
44    error = GB_end_transaction(gbmain, error);
45    aww->hide_or_notify(error);
46
47    free(dest);
48    free(source);
49}
50
51
52
53AW_window *MG_create_extended_rename_window1(AW_root *root)
54{
55    AW_window_simple *aws = new AW_window_simple;
56    aws->init( root, "MERGE_RENAME_SAI_1", "SAI RENAME 1");
57    aws->load_xfig("ad_al_si.fig");
58
59    aws->callback( (AW_CB0)AW_POPDOWN);
60    aws->at("close");
61    aws->create_button("CLOSE","CLOSE","C");
62
63    aws->at("label");
64    aws->create_autosize_button(0,"Please enter the new name\nof the SAI");
65
66    aws->at("input");
67    aws->create_input_field(AWAR_EX_DEST1,15);
68
69    aws->at("ok");
70    aws->callback((AW_CB)MG_extended_rename_cb,(AW_CL)GLOBAL_gb_merge,1);
71    aws->create_button("GO","GO","G");
72
73    return (AW_window *)aws;
74}
75
76AW_window *MG_create_extended_rename_window2(AW_root *root)
77{
78    AW_window_simple *aws = new AW_window_simple;
79    aws->init( root, "MERGE_RENAME_SAI_2", "SAI RENAME 2");
80    aws->load_xfig("ad_al_si.fig");
81
82    aws->callback( (AW_CB0)AW_POPDOWN);
83    aws->at("close");
84    aws->create_button("CLOSE","CLOSE","C");
85
86    aws->at("label");
87    aws->create_autosize_button(0,"Please enter the new name\nof the SAI");
88
89    aws->at("input");
90    aws->create_input_field(AWAR_EX_DEST2,15);
91
92    aws->at("ok");
93    aws->callback((AW_CB)MG_extended_rename_cb,(AW_CL)GLOBAL_gb_dest,2);
94    aws->create_button("GO","GO","G");
95
96    return (AW_window *)aws;
97}
98
99void MG_extended_delete_cb(AW_window *aww, GBDATA *gbmain, int ex_nr) {
100    GB_ERROR error = GB_begin_transaction(gbmain);
101
102    if (!error) {
103        const char *tsource = GBS_global_string("tmp/merge%i/extended_name", ex_nr);
104        char       *source  = aww->get_root()->awar(tsource)->read_string();
105
106        GBDATA *gb_sai    = GBT_find_SAI(gbmain, source);
107        if (gb_sai) error = GB_delete(gb_sai);
108        else    error     = "Please select a SAI first";
109
110        free(source);
111    }
112    GB_end_transaction_show_error(gbmain, error, aw_message);
113}
114
115void MG_transfer_extended(AW_window *aww, AW_CL force){
116    AW_root *awr    = aww->get_root();
117    char    *source = awr->awar(AWAR_EX_NAME1)->read_string();
118    char    *dest   = awr->awar(AWAR_EX_NAME1)->read_string();
119
120    GB_ERROR error    = GB_begin_transaction(GLOBAL_gb_dest);
121    if (!error) error = GB_begin_transaction(GLOBAL_gb_merge);
122
123    if (!error) {
124        GBDATA *gb_source = GBT_find_SAI(GLOBAL_gb_merge,dest);
125
126        if (!gb_source) error = "Please select the SAI you want to transfer";
127        else {
128            GBDATA *gb_sai_data2     = GBT_get_SAI_data(GLOBAL_gb_dest);
129            if (!gb_sai_data2) error = GB_await_error();
130            else {
131                GBDATA *gb_dest_sai = GBT_find_SAI_rel_SAI_data(gb_sai_data2,dest);
132                if(gb_dest_sai) {
133                    if (force) error = GB_delete(gb_dest_sai);
134                    else error       = GBS_global_string("SAI '%s' exists, delete it first", dest);
135                }
136                if (!error) {
137                    gb_dest_sai             = GB_create_container(gb_sai_data2, "extended");
138                    if (!gb_dest_sai) error = GB_await_error();
139                    else error              = GB_copy(gb_dest_sai,gb_source);
140                }
141            }
142        }
143    }
144
145    error = GB_end_transaction(GLOBAL_gb_dest, error);
146    error = GB_end_transaction(GLOBAL_gb_merge, error);
147    if (error) aw_message(error);
148
149    free(source);
150    free(dest);
151}
152
153void MG_map_extended1(AW_root *aw_root, AW_CL scannerid)
154{
155    char *source = aw_root->awar(AWAR_EX_NAME1)->read_string();
156    GB_push_transaction(GLOBAL_gb_merge);
157    GBDATA *gb_sai = GBT_find_SAI(GLOBAL_gb_merge,source);
158    awt_map_arbdb_scanner(scannerid,gb_sai,0, CHANGE_KEY_PATH);
159    GB_pop_transaction(GLOBAL_gb_merge);
160    free(source);
161}
162void MG_map_extended2(AW_root *aw_root, AW_CL scannerid)
163{
164    char *source = aw_root->awar(AWAR_EX_NAME2)->read_string();
165    GB_push_transaction(GLOBAL_gb_dest);
166    GBDATA *gb_sai = GBT_find_SAI(GLOBAL_gb_dest,source);
167    awt_map_arbdb_scanner(scannerid,gb_sai,0, CHANGE_KEY_PATH);
168    GB_pop_transaction(GLOBAL_gb_dest);
169    free(source);
170}
171
172
173AW_window *MG_merge_extendeds_cb(AW_root *awr){
174    static AW_window_simple *aws = 0;
175    if (aws) return (AW_window *)aws;
176
177    aws = new AW_window_simple;
178    aws->init( awr, "MERGE_SAI", "MERGE SAI");
179    aws->load_xfig("merge/extended.fig");
180
181    aws->at("close");aws->callback((AW_CB0)AW_POPDOWN);
182    aws->create_button("CLOSE","CLOSE","C");
183
184    aws->at("help");
185    aws->callback(AW_POPUP_HELP,(AW_CL)"mg_extendeds.hlp");
186    aws->create_button("HELP","HELP","H");
187
188    aws->at("ex1");
189    awt_create_selection_list_on_extendeds(GLOBAL_gb_merge,(AW_window *)aws,AWAR_EX_NAME1);
190    AW_CL scannerid = awt_create_arbdb_scanner(GLOBAL_gb_merge, aws, "info1",0,0,0,AWT_SCANNER,0,0,0, &AWT_species_selector);
191    aws->get_root()->awar(AWAR_EX_NAME1)->add_callback(MG_map_extended1,scannerid);
192
193    aws->at("ex2");
194    awt_create_selection_list_on_extendeds(GLOBAL_gb_dest,(AW_window *)aws,AWAR_EX_NAME2);
195    scannerid = awt_create_arbdb_scanner(GLOBAL_gb_dest, aws, "info2",0,0,0,AWT_SCANNER,0,0,0, &AWT_species_selector);
196    aws->get_root()->awar(AWAR_EX_NAME2)->add_callback(MG_map_extended2,scannerid);
197
198    aws->button_length(20);
199
200    aws->at("delete1");
201    aws->callback((AW_CB)MG_extended_delete_cb,(AW_CL)GLOBAL_gb_merge,1);
202    aws->create_button("DELETE_SAI_DB1", "Delete SAI");
203
204    aws->at("delete2");
205    aws->callback((AW_CB)MG_extended_delete_cb,(AW_CL)GLOBAL_gb_dest,2);
206    aws->create_button("DELETE_SAI_DB2", "Delete SAI");
207
208    aws->at("rename1");
209    aws->callback((AW_CB1)AW_POPUP,(AW_CL)MG_create_extended_rename_window1);
210    aws->create_button("RENAME_SAI_DB1", "Rename SAI");
211
212    aws->at("rename2");
213    aws->callback((AW_CB1)AW_POPUP,(AW_CL)MG_create_extended_rename_window2);
214    aws->create_button("RENAME_SAI_DB2", "Rename SAI");
215
216    aws->at("transfer");
217    aws->callback(MG_transfer_extended,0);
218    aws->create_button("TRANSFER_SAI", "Transfer SAI");
219
220    aws->button_length(0);
221    aws->shadow_width(1);
222    aws->at("icon");
223    aws->callback(AW_POPUP_HELP,(AW_CL)"mg_extendeds.hlp");
224    aws->create_button("HELP_MERGE", "#merge/icon.bitmap");
225
226    return (AW_window *)aws;
227}
Note: See TracBrowser for help on using the repository browser.