source: branches/stable/SL/ITEMS/item_sel_list.h

Last change on this file was 18662, checked in by westram, 3 years ago
  • add toggle to 'MODIFY DATABASE FIELD of listed …' permitting to change the 'name' field.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.7 KB
Line 
1// ==================================================================== //
2//                                                                      //
3//   File      : item_sel_list.h                                        //
4//   Purpose   : selection lists for items (ItemSelector)               //
5//                                                                      //
6//                                                                      //
7// Coded by Ralf Westram (coder@reallysoft.de) in May 2005              //
8// Copyright Department of Microbiology (Technical University Munich)   //
9//                                                                      //
10// Visit our web site at: http://www.arb-home.de/                       //
11//                                                                      //
12// ==================================================================== //
13
14#ifndef ITEM_SEL_LIST_H
15#define ITEM_SEL_LIST_H
16
17#ifndef AW_SELECT_HXX
18#include <aw_select.hxx>
19#endif
20#ifndef ITEMS_H
21#include "items.h"
22#endif
23#ifndef _GLIBCXX_STRING
24#include <string>
25#endif
26
27#define PSEUDO_FIELD_ANY_FIELD      "[any field]"
28#define PSEUDO_FIELD_ALL_FIELDS     "[all fields]"
29#define PSEUDO_FIELD_ANY_FIELD_REC  "[any recursive]"
30#define PSEUDO_FIELD_ALL_FIELDS_REC "[all recursive]"
31
32enum SelectableFields {
33    SF_STANDARD  = 0,  // normal fields
34    SF_PSEUDO    = 1,  // pseudo-fields (see defines above)
35    SF_HIDDEN    = 2,  // fields hidden by user
36    SF_ALLOW_NEW = 4,  // allow on-the-fly creation of new fields
37    SF_SHOW_TYPE = 8,  // show fieldtype prefix
38};
39
40
41CONSTEXPR long FIELD_FILTER_STRING           = (1<<GB_STRING);
42CONSTEXPR long FIELD_FILTER_STRING_WRITEABLE = (1<<GB_STRING);
43CONSTEXPR long FIELD_FILTER_INT_WRITEABLE    = (1<<GB_STRING) | (1<<GB_INT);
44CONSTEXPR long FIELD_FILTER_BYTE_WRITEABLE   = (1<<GB_STRING) | (1<<GB_INT) | (1<<GB_BYTE) | (1<<GB_FLOAT);
45CONSTEXPR long FIELD_FILTER_FLOAT_WRITEABLE  = (1<<GB_STRING) | (1<<GB_FLOAT);
46
47CONSTEXPR long FIELD_FILTER_STRING_READABLE = (1<<GB_BYTE)|(1<<GB_INT)|(1<<GB_FLOAT)|(1<<GB_STRING)|(1<<GB_BITS); // as supported by GB_read_as_string()
48
49CONSTEXPR long FIELD_UNFILTERED       = -1L;                             // any field or container
50CONSTEXPR long FIELD_FILTER_ANY_FIELD = (FIELD_UNFILTERED ^ (1<<GB_DB)); // no containers
51
52CONSTEXPR long FIELD_FILTER_NDS = FIELD_FILTER_STRING_READABLE;
53
54
55class Itemfield_Selection : public AW_DB_selection { // derived from a Noncopyable
56    long             type_filter;
57    SelectableFields field_filter;
58    ItemSelector&    selector;
59
60    bool shall_display_type(GB_TYPES key_type) const { return type_filter & (1 << key_type); }
61
62public:
63    Itemfield_Selection(AW_selection_list *sellist_,
64                        GBDATA            *gb_key_data,
65                        long               type_filter_,
66                        SelectableFields   field_filter_,
67                        ItemSelector&      selector_);
68
69    void fill() OVERRIDE;
70
71    ItemSelector& get_selector() const { return selector; }
72    long get_type_filter() const { return type_filter; }
73};
74
75class FieldSelDef {
76    std::string          awar_name;
77    std::string          purpose;
78    RefPtr<GBDATA>       gb_main;
79    RefPtr<ItemSelector> selector; // @@@ gb_main + selector = BoundItemSel (replace?)
80    long                 type_filter;
81    SelectableFields     field_filter;
82
83public:
84    FieldSelDef(const char *awar_name_, GBDATA *gb_main_, ItemSelector& selector_, long type_filter_, const char *purpose_ = "field", SelectableFields field_filter_ = SF_STANDARD)
85    /*! parameter collection for itemfield-selections
86     * @param awar_name_           the name of the awar bound to the selection list
87     * @param gb_main_             the database
88     * @param selector_            describes the item type, for which fields are shown
89     * @param type_filter_         is a bitstring which controls what types will be shown in the selection list (several filters are predefined: 'FIELD_FILTER_...', FIELD_UNFILTERED)
90     * @param purpose_             describes purpose of field (defaults to 'field'; appears in popup-title and error-messages)
91     * @param field_filter_        controls if pseudo-fields and/or hidden fields are added and whether new fields are allowed (defaults to SF_STANDARD)
92     */
93        : awar_name(awar_name_),
94          purpose(purpose_),
95          gb_main(gb_main_),
96          selector(&selector_),
97          type_filter(type_filter_),
98          field_filter(field_filter_)
99    {}
100
101    const std::string& get_awarname() const { return awar_name; }
102    const std::string& get_described_field() const { return purpose; }
103    long get_type_filter() const { return type_filter; }
104    SelectableFields get_field_filter() const { return field_filter; }
105    GBDATA *get_gb_main() const { return gb_main; }
106    ItemSelector& get_itemtype() const { return *selector; }
107
108    // for internal use only:
109    bool new_fields_allowed() const { return field_filter & SF_ALLOW_NEW; }
110    Itemfield_Selection *build_sel(AW_selection_list *from_sellist) const;
111    bool matches4reuse(const FieldSelDef& other) const;
112};
113
114enum FailIfField {
115    FIF_NAME_SELECTED     = 1, // fail if 'name' field selected
116    FIF_NO_FIELD_SELECTED = 2, // fail if NO_FIELD_SELECTED
117
118    // use-cases:
119    FIF_STANDARD        = FIF_NAME_SELECTED|FIF_NO_FIELD_SELECTED,
120    FIF_ALLOW_NONE      = FIF_STANDARD^FIF_NO_FIELD_SELECTED,
121    FIF_ALLOW_ID_CHANGE = FIF_STANDARD^FIF_NAME_SELECTED,
122};
123
124Itemfield_Selection *create_itemfield_selection_list(  AW_window *aws, const FieldSelDef& selDef, const char *at);
125void                 create_itemfield_selection_button(AW_window *aws, const FieldSelDef& selDef, const char *at);
126const char          *prepare_and_get_selected_itemfield(AW_root *awr, const char *awar_name, GBDATA *gb_main, const ItemSelector& itemtype, FailIfField failIf = FIF_STANDARD);
127const char          *get_itemfield_type_awarname(const char *itemfield_awarname);
128
129enum RescanMode {
130    RESCAN_REFRESH  = 1, // scan database for unregistered/unused fields and update the field list
131    RESCAN_SHOW_ALL = 2, // unhide all hidden fields
132};
133
134// @@@ generalize (use BoundItemSel)
135
136void species_field_selection_list_rescan(GBDATA *gb_main, RescanMode mode);
137void gene_field_selection_list_rescan   (GBDATA *gb_main, RescanMode mode);
138
139void species_field_selection_list_unhide_all_cb(AW_window*, GBDATA *gb_main);
140void species_field_selection_list_update_cb    (AW_window*, GBDATA *gb_main);
141
142void gene_field_selection_list_unhide_all_cb(AW_window*, GBDATA *gb_main);
143void gene_field_selection_list_update_cb    (AW_window*, GBDATA *gb_main);
144
145void experiment_field_selection_list_unhide_all_cb(AW_window*, GBDATA *gb_main);
146void experiment_field_selection_list_update_cb    (AW_window*, GBDATA *gb_main);
147
148#else
149#error item_sel_list.h included twice
150#endif // ITEM_SEL_LIST_H
151
Note: See TracBrowser for help on using the repository browser.