source: tags/cvs_2_svn/MERGE/MG_configs.cxx

Last change on this file was 5340, checked in by westram, 16 years ago
  • use GB_CASE parameter
  • changed GBS_string_[s]cmp
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.3 KB
Line 
1//  ==================================================================== //
2//                                                                       //
3//    File      : MG_configs.cxx                                         //
4//    Purpose   : Merge editor configurations                            //
5//    Time-stamp: <Thu May/22/2008 15:51 MET Coder@ReallySoft.de>        //
6//                                                                       //
7//                                                                       //
8//  Coded by Ralf Westram (coder@reallysoft.de) in July 2003             //
9//  Copyright Department of Microbiology (Technical University Munich)   //
10//                                                                       //
11//  Visit our web site at: http://www.arb-home.de/                       //
12//                                                                       //
13//                                                                       //
14//  ==================================================================== //
15
16#include <stdio.h>
17#include <stdlib.h>
18#include <arbdb.h>
19#include <arbdbt.h>
20#include <ad_config.h>
21#include <aw_root.hxx>
22#include <aw_device.hxx>
23#include <aw_window.hxx>
24#include <awt.hxx>
25#include <awt_sel_boxes.hxx>
26#include "merge.hxx"
27
28#define AWAR_CONFIG_NAME1 "tmp/merge1/config_name"
29#define AWAR_CONFIG_DEST1 "tmp/merge1/config_dest"
30#define AWAR_CONFIG_NAME2 "tmp/merge2/config_name"
31#define AWAR_CONFIG_DEST2 "tmp/merge2/config_dest"
32
33void MG_create_config_awar(AW_root *aw_root, AW_default aw_def)
34{
35    aw_root->awar_string( AWAR_CONFIG_NAME1, "" , aw_def);
36    aw_root->awar_string( AWAR_CONFIG_DEST1, "" , aw_def);
37    aw_root->awar_string( AWAR_CONFIG_NAME2, "" , aw_def);
38    aw_root->awar_string( AWAR_CONFIG_DEST2, "" , aw_def);
39}
40
41void MG_config_rename_cb(AW_window *aww, GBDATA *gbd, int config_nr) {
42    GB_ERROR    error   = 0;
43    const char *tsource = config_nr == 1 ? AWAR_CONFIG_NAME1 : AWAR_CONFIG_NAME2;
44    const char *tdest   = config_nr == 1 ? AWAR_CONFIG_DEST1 : AWAR_CONFIG_DEST2;
45
46    char *source = aww->get_root()->awar(tsource)->read_string();
47    char *dest   = aww->get_root()->awar(tdest)->read_string();
48
49    error = GB_check_key(dest);
50    if (!error) {
51        GB_begin_transaction(gbd);
52        GBDATA *gb_config_data = GB_search(gbd, AWAR_CONFIG_DATA, GB_CREATE_CONTAINER);
53        GBDATA *gb_source_name = GB_find_string(gb_config_data, "name", source, GB_IGNORE_CASE, down_2_level);
54        GBDATA *gb_dest_name   = GB_find_string(gb_config_data, "name", dest,   GB_IGNORE_CASE, down_2_level);
55
56        if (gb_dest_name) {
57            error = "Sorry: Configuration already exists";
58        }
59        else if (gb_source_name) {
60            error = GB_write_string(gb_source_name, dest);
61        }
62        else {
63            error = "Please select a configuration first";
64        }
65
66        if (!error) GB_commit_transaction(gbd);
67        else        GB_abort_transaction(gbd);
68    }
69
70    if (error) aw_message(error);
71    else aww->hide();
72
73    free(source);
74    free(dest);
75}
76
77AW_window *MG_create_config_rename_window1(AW_root *root) {
78    AW_window_simple *aws = new AW_window_simple;
79    aws->init( root, "MERGE_RENAME_CONFIG_1", "CONFIGURATION RENAME 1");
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 configuration");
88
89    aws->at("input");
90    aws->create_input_field(AWAR_CONFIG_DEST1,15);
91
92    aws->at("ok");
93    aws->callback((AW_CB)MG_config_rename_cb,(AW_CL)GLOBAL_gb_merge,1);
94    aws->create_button("GO","GO","G");
95
96    return (AW_window *)aws;
97}
98
99AW_window *MG_create_config_rename_window2(AW_root *root) {
100    AW_window_simple *aws = new AW_window_simple;
101    aws->init( root, "MERGE_RENAME_CONFIG_2", "CONFIGURATION RENAME 2");
102    aws->load_xfig("ad_al_si.fig");
103
104    aws->callback( (AW_CB0)AW_POPDOWN);
105    aws->at("close");
106    aws->create_button("CLOSE","CLOSE","C");
107
108    aws->at("label");
109    aws->create_autosize_button(0,"Please enter the new name\nof the configuration");
110
111    aws->at("input");
112    aws->create_input_field(AWAR_CONFIG_DEST2,15);
113
114    aws->at("ok");
115    aws->callback((AW_CB)MG_config_rename_cb,(AW_CL)GLOBAL_gb_dest,2);
116    aws->create_button("GO","GO","G");
117
118    return (AW_window *)aws;
119}
120
121void MG_config_delete_cb(AW_window *aww,GBDATA *gbd, long config_nr) {
122    GB_ERROR    error            = 0;
123    const char *config_name_awar = config_nr == 1 ? AWAR_CONFIG_NAME1 : AWAR_CONFIG_NAME2;
124    char       *config_name      = aww->get_root()->awar(config_name_awar)->read_string();
125
126    GB_begin_transaction(gbd);
127
128    GBDATA *gb_config_data = GB_search(gbd, AWAR_CONFIG_DATA, GB_CREATE_CONTAINER);
129    GBDATA *gb_config_name = GB_find_string(gb_config_data, "name", config_name, GB_IGNORE_CASE, down_2_level);
130
131    if (gb_config_name) {
132        GBDATA *gb_config = GB_get_father(gb_config_name);
133        error             = GB_delete(gb_config);
134    }
135    else {
136        error = "Select a config to delete";
137    }
138
139    if (!error) GB_commit_transaction(gbd);
140    else        GB_abort_transaction(gbd);
141
142    if (error) aw_message(error);
143    free(config_name);
144}
145
146void MG_transfer_config(AW_window *aww) {
147    AW_root  *awr    = aww->get_root();
148    char     *source = awr->awar(AWAR_CONFIG_NAME1)->read_string();
149    char     *dest   = awr->awar(AWAR_CONFIG_NAME1)->read_string();
150    GB_ERROR  error  = 0;
151    GB_begin_transaction(GLOBAL_gb_dest);
152    GB_begin_transaction(GLOBAL_gb_merge);
153
154    GBDATA *gb_config_data1 = GB_search(GLOBAL_gb_merge, AWAR_CONFIG_DATA, GB_CREATE_CONTAINER);
155    GBDATA *gb_config_data2 = GB_search(GLOBAL_gb_dest,  AWAR_CONFIG_DATA, GB_CREATE_CONTAINER);
156    GBDATA *gb_cfgname_1    = GB_find_string(gb_config_data1, "name", source, GB_IGNORE_CASE, down_2_level);
157    GBDATA *gb_cfgname_2    = GB_find_string(gb_config_data2, "name", dest,   GB_IGNORE_CASE, down_2_level);
158
159    if (!gb_cfgname_1) {
160        error = "Please select the configuration you want to transfer";
161    }
162    else if (gb_cfgname_2) {
163        error = "To overwrite a configuration, delete it first!";
164    }
165    else {
166        GBDATA *gb_cfg_1 = GB_get_father(gb_cfgname_1);
167        GBDATA *gb_cfg_2 = GB_create_container(gb_config_data2, "configuration");
168        error            = GB_copy(gb_cfg_2, gb_cfg_1);
169    }
170
171    if (!error) {
172        GB_commit_transaction(GLOBAL_gb_dest);
173        GB_commit_transaction(GLOBAL_gb_merge);
174    }else{
175        GB_abort_transaction(GLOBAL_gb_dest);
176        GB_abort_transaction(GLOBAL_gb_merge);
177    }
178    if (error) aw_message(error);
179    free(source);
180    free(dest);
181}
182
183AW_window *MG_merge_configs_cb(AW_root *awr) {
184    static AW_window_simple *aws = 0;
185    if (aws) return (AW_window *)aws;
186
187    aws = new AW_window_simple;
188    aws->init( awr, "MERGE_CONFIGS", "MERGE CONFIGS");
189    aws->load_xfig("merge/configs.fig");
190
191    aws->button_length(20);
192
193    aws->at("close");aws->callback((AW_CB0)AW_POPDOWN);
194    aws->create_button("CLOSE","CLOSE","C");
195
196    aws->at("help");
197    aws->callback(AW_POPUP_HELP,(AW_CL)"mg_configs.hlp");
198    aws->create_button("HELP","HELP","H");
199
200    aws->at("configs1");
201    awt_create_selection_list_on_configurations(GLOBAL_gb_merge,(AW_window *)aws,AWAR_CONFIG_NAME1);
202
203    aws->at("configs2");
204    awt_create_selection_list_on_configurations(GLOBAL_gb_dest,(AW_window *)aws,AWAR_CONFIG_NAME2);
205
206    aws->at("delete1");
207    aws->callback((AW_CB)MG_config_delete_cb,(AW_CL)GLOBAL_gb_merge,1);
208    aws->create_button("DELETE CONFIG_DB1", "Delete Config");
209
210    aws->at("delete2");
211    aws->callback((AW_CB)MG_config_delete_cb,(AW_CL)GLOBAL_gb_dest,2);
212    aws->create_button("DELETE_CONFIG_DB2", "Delete Config");
213
214    aws->at("rename1");
215    aws->callback((AW_CB1)AW_POPUP,(AW_CL)MG_create_config_rename_window1);
216    aws->create_button("RENAME_CONFIG_DB1", "Rename Config");
217
218    aws->at("rename2");
219    aws->callback((AW_CB1)AW_POPUP,(AW_CL)MG_create_config_rename_window2);
220    aws->create_button("RENAME_CONFIG_DB2", "Rename Config");
221
222    aws->at("transfer");
223    aws->callback(MG_transfer_config);
224    aws->create_button("TRANSFER_CONFIG", "Transfer Config");
225
226    aws->button_length(0);
227    aws->shadow_width(1);
228    aws->at("icon");
229    aws->callback(AW_POPUP_HELP,(AW_CL)"mg_configs.hlp");
230    aws->create_button("HELP_MERGE", "#merge/icon.bitmap");
231
232    return (AW_window *)aws;
233}
234
235
Note: See TracBrowser for help on using the repository browser.