source: branches/profile/NTREE/NT_validManual.cxx

Last change on this file was 12186, checked in by westram, 10 years ago
  • AW_window::create_selection_list expects new parameter 'fallback2default'
    • change calls outside WINDOW (pass 'true' everywhere, which previous default behavior in gtk)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.5 KB
Line 
1// =============================================================== //
2//                                                                 //
3//   File      : NT_validManual.cxx                                //
4//   Purpose   :                                                   //
5//                                                                 //
6//   Institute of Microbiology (Technical University Munich)       //
7//   http://www.arb-home.de/                                       //
8//                                                                 //
9// =============================================================== //
10
11#include "NT_local.h"
12#include <aw_awars.hxx>
13#include <aw_root.hxx>
14#include <aw_msg.hxx>
15#include <aw_select.hxx>
16#include <arbdbt.h>
17
18#include <string>
19#include <list>
20#include <vector>
21#include <fstream>
22#include <iostream>
23
24#define AWAR_SELECTED_VALNAME "tmp/validNames/selectedName"
25#define AWAR_INPUT_INITIALS   "tmp/validNames/inputInitials"
26
27struct selectValidNameStruct {
28    GBDATA            *gb_main;
29    AW_window         *aws;
30    AW_root           *awr;
31    AW_selection_list *validNamesList;
32    const char        *initials;
33};
34
35// --------------------------creating and initializing AWARS----------------------------------------
36void NT_createValidNamesAwars(AW_root *aw_root, AW_default aw_def) {
37    aw_root->awar_string(AWAR_SELECTED_VALNAME, "????",   aw_def);
38    aw_root->awar_string(AWAR_INPUT_INITIALS,    "",      aw_def);
39}
40
41static void fillSelNamList(selectValidNameStruct* svnp) {
42    const char* searchstr = svnp -> initials;
43    size_t length = strlen(searchstr);
44    svnp->validNamesList->clear();
45
46    GB_begin_transaction(GLOBAL.gb_main);
47
48    GBDATA* GB_validNamesCont = GB_entry(GLOBAL.gb_main, "VALID_NAMES");
49    if (!GB_validNamesCont) { std::cout << "validNames Container not found\n"; }
50
51    GB_ERROR err = 0;
52
53    // search validNames
54
55    for (GBDATA *GB_validNamePair = GB_entry(GB_validNamesCont, "pair");
56         GB_validNamePair && !err;
57         GB_validNamePair = GB_nextEntry(GB_validNamePair))
58    {
59        // retrieve list of all species names
60        GBDATA* actDesc = GB_entry(GB_validNamePair, "DESCTYPE");
61        char* typeString = GB_read_string(actDesc);
62        if (strcmp(typeString, "NOTYPE") != 0) {
63            GBDATA* newName = GB_entry(GB_validNamePair, "NEWNAME");
64            char* validName = newName ? GB_read_string(newName) : NULL;
65
66            if (!validName) {
67                err = GBS_global_string("Invalid names entry");
68            }
69            else {
70                // comparison with searchstr goes here
71                // ptr to list, item to display, item value (here: equal)
72
73                if (strncmp (validName, searchstr, length) == 0) {
74                    svnp->validNamesList->insert(validName, validName);
75                }
76
77                free(validName);
78            }
79        }
80        free(typeString);
81    }
82
83    err = GB_end_transaction(GLOBAL.gb_main, err);
84    if (err) aw_message(err);
85    else {
86        svnp->validNamesList->insert_default("????", "????");
87        svnp->validNamesList->sort(false, true);
88        svnp->validNamesList->update();
89    }
90}
91
92static void updateValNameList(AW_root *awr, AW_CL cl_svnp) {
93    selectValidNameStruct *svnp = reinterpret_cast<selectValidNameStruct*>(cl_svnp);
94    const char* selectedName = awr->awar(AWAR_INPUT_INITIALS)->read_string();
95
96#ifdef DUMP
97    aw_message(GBS_global_string("now selected: %s\n", selectedName));
98#endif
99    svnp->initials = selectedName;
100    fillSelNamList(svnp);
101#ifdef DUMP
102    aw_message(GBS_global_string("SelectionList updated"));
103#endif
104}
105
106static selectValidNameStruct* createValNameList(GBDATA *gb_main, AW_window *aws, const char *awarName) {
107#if defined(DUMP)
108    aw_message("ValidNameSelectionList was created");
109#endif // DUMP
110
111    static selectValidNameStruct* svnp = new selectValidNameStruct; // declared static
112
113    svnp->aws            = aws;
114    svnp->gb_main        = gb_main;
115    svnp->validNamesList = aws->create_selection_list(awarName, 10, 20, true);
116    svnp->initials       = "";
117
118    fillSelNamList(svnp);
119    return svnp;
120}
121
122// this function transfer a the selected valid name upon mouse click on select button to selected species
123static void selectValidNameFromList(AW_window* selManWindowRoot, AW_CL, AW_CL)
124
125{
126    char *selectedValName     = selManWindowRoot->get_root()->awar(AWAR_SELECTED_VALNAME)->read_string();
127    char *selectedSpeciesName = selManWindowRoot->get_root()->awar(AWAR_SPECIES_NAME)->read_string();
128
129    GB_ERROR err = 0;
130    if (selectedSpeciesName[0] == 0) err = "No species selected";
131    else {
132        err = GB_begin_transaction(GLOBAL.gb_main);
133        if (!err) {
134            GBDATA *gb_selected_species = GBT_find_species(GLOBAL.gb_main, selectedSpeciesName);
135            if (!gb_selected_species) {
136                err = GBS_global_string("species '%s' not found in database", selectedSpeciesName);
137            }
138            else {
139                GBDATA *gb_name_cont = GB_search(gb_selected_species, "Valid_Name", GB_CREATE_CONTAINER);
140
141                if (!gb_name_cont) err = "could not create Valid Name container in database";
142                else {
143                    err           = GBT_write_string(gb_name_cont, "NameString", selectedValName);
144                    if (!err) err = GBT_write_string(gb_name_cont, "DescType", "MAN");
145                }
146            }
147        }
148        err = GB_end_transaction(GLOBAL.gb_main, err);
149    }
150
151    if (err) aw_message(err);
152
153    free(selectedSpeciesName);
154    free(selectedValName);
155}
156
157AW_window *NT_create_searchManuallyNames_window(AW_root *aw_root) {
158    AW_window_simple *aws = new AW_window_simple;
159    aws->init(aw_root, "SEARCH_VALID_NAMES_MANUALLY", "Search Names Manually");
160    aws->load_xfig("ad_selManNam.fig");
161
162    aws->at("close");
163    aws->callback(AW_POPDOWN); // arb specific close callback, like a constant
164    aws->create_button("CLOSE", "CLOSE", "C");
165
166    aws->at("help");
167    aws->callback(makeHelpCallback("vn_search.hlp"));
168    aws->create_button("HELP", "HELP", "H");
169
170    aws->at("nameList");
171    // creates the selection list and asign AWAR_SELECTED_VALNAME
172
173    selectValidNameStruct *vns = createValNameList(GLOBAL.gb_main, aws, AWAR_SELECTED_VALNAME);
174
175    aws->at("select");
176    aws->callback(selectValidNameFromList, 0, 0); // (... 0,0)
177    aws->create_button("SELECT", "SELECT");
178
179    aws->at("enterInitial");
180    aws->create_input_field(AWAR_INPUT_INITIALS,  30);
181
182    aw_root->awar(AWAR_INPUT_INITIALS)->add_callback(updateValNameList, (AW_CL)vns);
183
184
185    return aws;
186
187}
Note: See TracBrowser for help on using the repository browser.